wxPython in Action (ProgressDialog)

  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 in Action (ProgressDialog))