【发布时间】:2014-03-26 13:28:14
【问题描述】:
我希望有人能够帮助我显示使用 wxPython 的长期运行任务的进度。
我目前有一个函数,它由一个按钮调用,并执行 5 个其他函数,例如
def sum(self, event):
self.processSents()
self.processWords()
self.repSents()
self.measSim()
self.selCont()
我想在执行这些功能时显示一个进度条,因为程序有时会挂起,这并不理想。
我看过的很多解决方案都建议使用线程,但我对 Python 中的线程非常缺乏经验,而且我的尝试也没有让我快速取得进展。例如,我不确定对话框是否应该在线程中、正在执行的代码中,或者两者兼而有之。
我目前的尝试如下:
def sum(self, event):
progress = wx.ProgressDialog("sum in progress", "please wait", maximum=100, parent=self, style=wx.PD_SMOOTH|wx.PD_AUTO_HIDE)
self.Start(self.DoWork, progress)
progress.ShowModal()
def Start(func, *args):
thread = threading.Thread(target=func, args=args)
thread.setDaemon(True)
thread.start()
def DoWork(self, progress):
for i in range(101):
ex.CallAfter(progress.Update, i)
time.sleep(0.2)
self.processSents()
self.processWords()
self.repSents()
self.measSim()
self.selCont()
wx.CallAfter(progress.Destroy)
到目前为止我看到的解决方案是:
Updating a wxPython progress bar after calling app.MainLoop()
How to thread wxPython progress bar
How Can I Safely Manage wxPython Progress Dialog Threading?
http://wiki.wxpython.org/LongRunningTasks
任何帮助或建议将不胜感激,因为我很迷茫:(
谢谢
克里斯
更新到工作版本(根据 Corley 的建议结合了 Jerry 的响应与 wx.Yield() 的组合
def sum(self, event):
progress = wx.ProgressDialog("sum in progress", "please wait", maximum=100, parent=self, style=wx.PD_SMOOTH|wx.PD_AUTO_HIDE)
self.processSents()
percent = 20
progress.Update(percent)
self.processWords()
percent += 20
progress.Update(percent)
// repSends, measSim and selCont omitted to save space
progress.Destroy()
wx.Yield() 从每个函数中调用,例如
def processSents(self):
// some long running process
wx.Yield()
// end of long running process
【问题讨论】:
标签: python python-2.7 wxpython