9.1.5 如何显示进度条?
在许多程序中,程序需要自己做些事情而不受用户输入的干扰。这时就需要给用户一些可见的显示,以表明程序正在做一些事情及完成的进度。在wxPython中,这通常使用一个进度条来管理,如图9.5所示。
图9.5
例9.5显示了产生图9.5的代码
例9.5 生成一个进度条
import wx
if __name__
==
"__main__":
app
=
wx.PySimpleApp()
progressMax
=
100
dialog
=
wx.ProgressDialog("A
progress
box",
"Time
remaining",
progressMax,
style=wx.PD_CAN_ABORT
|
wx.PD_ELAPSED_TIME
|
wx.PD_REMAINING_TIME)
keepGoing
=
True
count
=
0
while
keepGoing
and
count
<
progressMax:
count
=
count
+
1
wx.Sleep(1)
keepGoing
=
dialog.Update(count)
dialog.Destroy()
进度条的所有选项在构造函数中被设置,构造函数如下:
wx.ProgressDialog(title, message,
maximum=100,
parent=None,
style=wx.PD_AUTO_HIDE
|
wx.PD_APP_MODAL)
这些参数不同于其它对话框的。参数title被放置在窗口的标题栏,message被显示在对话框中。maximum是你用来显示进度计数的最大值。
表9.3 列出了特定于wx.ProgressDialog六个样式,它们影响进度条的行为。
表9.3 wx.ProgressDialog的样式
wx.PD_APP_MODAL:如果设置了这个样式,进度条对整个应用程序是模式的,这将阻塞所有的用户事件。如果没有设置这个样式,那么进度条仅对它的父窗口是模式的。
wx.PD_AUTO_HIDE:进度条将自动隐藏自身直到它达到它的最大值。
wx.PD_CAN_ABORT:在进度条上放上一个Cancel按钮,以便用户停止。如何响应来自该对话框的取消将在以后说明。
wx.PD_ELAPSED_TIME:显示该对话框已经出现了多长时间。
wx.PD_ESTIMATED_TIME:显示根据已花的时间、当前的计数值和计数器的最大值所估计出的完成进度所需的总时间。
wx.PD_REMAINING_TIME:显示要完成进度所估计的剩余时间,或(所需总时间-已花时间)。
要使用进度条,就要调用它的唯一的方法Update(value,newmsg="")。value参数是进度条的新的内部的值,调用update将导致进度条根据新的计数值与最大计算值的比例重绘。如果使用可选的参数newmsg,那么进度条上的文本消息将变为该字符串。这让你可以给用户一个关于当前进度的文本描述。
这个Update()方法通常返回True。但是,如果用户通过Cancel按钮已经取消了该对话框,那么下次的Update()将返回False。这是你响应用户的取消请求的机会。要检测用户的取消请求,我们建议你尽可能频繁地Update()。
在许多程序中,程序需要自己做些事情而不受用户输入的干扰。这时就需要给用户一些可见的显示,以表明程序正在做一些事情及完成的进度。在wxPython中,这通常使用一个进度条来管理,如图9.5所示。
图9.5

例9.5显示了产生图9.5的代码
例9.5
import
if
进度条的所有选项在构造函数中被设置,构造函数如下:
wx.ProgressDialog(title,
这些参数不同于其它对话框的。参数title被放置在窗口的标题栏,message被显示在对话框中。maximum是你用来显示进度计数的最大值。
表9.3
表9.3
wx.PD_APP_MODAL:如果设置了这个样式,进度条对整个应用程序是模式的,这将阻塞所有的用户事件。如果没有设置这个样式,那么进度条仅对它的父窗口是模式的。
wx.PD_AUTO_HIDE:进度条将自动隐藏自身直到它达到它的最大值。
wx.PD_CAN_ABORT:在进度条上放上一个Cancel按钮,以便用户停止。如何响应来自该对话框的取消将在以后说明。
wx.PD_ELAPSED_TIME:显示该对话框已经出现了多长时间。
wx.PD_ESTIMATED_TIME:显示根据已花的时间、当前的计数值和计数器的最大值所估计出的完成进度所需的总时间。
wx.PD_REMAINING_TIME:显示要完成进度所估计的剩余时间,或(所需总时间-已花时间)。
要使用进度条,就要调用它的唯一的方法Update(value,newmsg="")。value参数是进度条的新的内部的值,调用update将导致进度条根据新的计数值与最大计算值的比例重绘。如果使用可选的参数newmsg,那么进度条上的文本消息将变为该字符串。这让你可以给用户一个关于当前进度的文本描述。
这个Update()方法通常返回True。但是,如果用户通过Cancel按钮已经取消了该对话框,那么下次的Update()将返回False。这是你响应用户的取消请求的机会。要检测用户的取消请求,我们建议你尽可能频繁地Update()。