网站首页 > 技术文章 正文
实战wxPython系列-026
在一些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:这个标志告诉对话框它应该显示剩余时间。
二、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的设置,进度对话框可以有不同的信息显示。
三、本文知识点
- 了解和使用通用进度条对话框wx.ProgressDialog。
前一篇:wxPython - 查找替换对话框FindReplaceDialog
请关注,评论,收藏,点赞,和转发。
猜你喜欢
- 2024-09-26 神奇的pv命令--直观查看压缩和解压文件时的进度
- 2024-09-26 多线程之 AsyncTask 使用详解和从源码中深入理解 AsyncTask 机制
- 2024-09-26 Flutter 对 iOS、Android(双端开发者)的快速理解(二)
- 2024-09-26 用RxJava优雅的执行并发网络请求(rxjava 多个网络请求)
- 2024-09-26 Flutter项目如何将任务转移到后台线程?Flutter后台任务的写法
- 2024-09-26 精心整理:移动应用常见的Bug汇总及预防方法
- 2024-09-26 「技术」Qt对话框讲解(qt对话框关闭按钮禁灰)
- 2024-09-26 数据连接相关类简介(数据连接性问题)
- 2024-09-26 一行代码解决重复点击问题(重复一句话的代码)
- 2024-09-26 MUI框架原生wepApp启动遇到过的坑与总结
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)