在一些GUI程序中, 程序需要执行一段运行时间较长的代码,这时候可能需要给用户一些可见的提示,以表明程序正在做一些事情以及事情的执行进度。在wxPython中提供了进度条对话框wx.ProgressDialog来实现这个功能。

一、wx. ProgressDialog

wx.ProgreessDialog表示一个显示短消息和进度条的对话框。它提供了进度对话框的通用实现。它可以显示终止(ABORT)和跳过(SKIP)按钮,以及进度结束的消耗时间、剩余时间和估计时间。

尽管wx.ProgressDialog并不是真正的模式对话框,但它就像其它模式对话框一样,它应该创建在堆栈上,而不是堆上,应该像下面的代码这样使用它:

progdlg = wx.ProgressDialog(...)
for i in range(100):
    if not progdlg.Update(i):
        # Cancelled by user.
        break

... do something time-consuming (but not too much) ...

wx.ProgreessDialog窗口样式有:

  • wx.PD_APP_MODAL:使进度对话框进入应用程序模式,即禁用所有应用程序窗口,只显示进度对话框。如果没有给出这个标志,它只是”局部”模式。
  • wx.PD_AUTO_HIDE:一旦达到进度表的最大值,进度对话框从界面上消失。如果不存在这种样式,一旦达到最大值,对话框就会变成模态对话框(请参阅wx.Dialog.ShowModal),并等待用户解除它。
  • wx.PD_SMOOTH:平滑进度控制(使用GA_SMOOTH模式的wx.Gauge控件)。
  • wx.PD_CAN_ABORT:这个标志告诉对话框它应该有一个“取消”按钮,用户可以按下这个按钮。如果发生这种情况,下一次调用Update将返回False。
  • wx.PD_CAN_SKIP:这个标志告诉对话框它应该有一个用户可以按下的“跳过”按钮。如果发生这种情况,下一次对Update的调用将在其skip参数中返回True。
  • wx.PD_ELAPSED_TIME:这个标志告诉对话框它应该显示流逝的时间(自创建对话框以来)。
  • wx.PD_ESTIMATED_TIME:这个标志告诉对话框它应该显示估计的时间。
  • wx.PD_REMAINING_TIME:这个标志告诉对话框它应该显示剩余时间。

wxpython 窗体调用另外一个窗体_开发语言

 图1:wx.ProgressDialog类继承关系

二、wx.ProgressDialog演示

下面的代码演示如何使用一个进度对话框wx.ProgressDialog。

#进度对话框(wx.ProgressDialog)

import wx

class SampleProgressDialog(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleProgressDialog, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: ProgressDialog演示")
        #设置窗口尺寸
        self.SetSize(400, 280)

        panel = wx.Panel(self)
        btnTest = wx.Button(panel, label="测试进度对话框", pos = (100, 20))
        btnTest.Bind(wx.EVT_BUTTON, self.OnTestProgressDialog)

        self.Centre()

    def OnTestProgressDialog(self, e):
        porgressMax = 100
        dlg = wx.ProgressDialog("进度条演示", "进度", porgressMax, style = wx.PD_CAN_ABORT | wx.PD_ELAPSED_TIME | wx.PD_REMAINING_TIME)
        keepGoing = True
        count = 0 
        while keepGoing and count < porgressMax:
            count += 1
            wx.MilliSleep(100)
            keepGoing = dlg.Update(count)

        dlg.Destroy()

def main():
    app = wx.App()
    sample = SampleProgressDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

运行上面的代码,在主窗口中点击"测试进度对话框",然后弹出一个进度对话框,该在示例中, 对话框的样式设置为:

style = wx.PD_CAN_ABORT | wx.PD_ELAPSED_TIME | wx.PD_REMAINING_TIME

对话框每隔100毫秒刷新一次,包括刷新进度条, 更新用时和剩余时间等信息。可以调整style的设置,进度对话框可以有不同的信息显示。

wxpython 窗体调用另外一个窗体_信息可视化_02

 图2:wx.ProgressDialog演示

三、本文知识点

  • 了解和使用通用进度条对话框wx.ProgressDialog。

前一篇:实战wxPython:025 - 查找替换对话框FindReplaceDialog