我有一个执行计算的 python 脚本,我已经为弹出式 wxPython 进度条创建了一个类。目前我有:
app=wx.App()
progress = ProgressBar()
app.MainLoop()
for i in xrange(len(toBeAnalysed)):
analyse(toBeAnalysed[i])
progress.update(i/len(toBeAnalysed)*100)
现在,由于显而易见的原因,这个示例不起作用。有什么方法可以让我在不同的线程中运行 app.MainLoop(),但在计算完成时仍然传达进度(和 .update() 它)?
感谢您的帮助。
最佳答案
您应该在后台线程中运行您的逻辑并使用wx.CallAfter
定期更新GUI。 CallAfter
将在 GUI 线程上调用提供的函数,因此进行 GUI 调用是安全的。
import wx
import threading
import time
def do_stuff(dialog): # put your logic here
for i in range(101):
wx.CallAfter(dialog.Update, i)
time.sleep(0.1)
wx.CallAfter(dialog.Destroy)
def start(func, *args): # helper method to run a function in another thread
thread = threading.Thread(target=func, args=args)
thread.setDaemon(True)
thread.start()
def main():
app = wx.PySimpleApp()
dialog = wx.ProgressDialog('Doing Stuff', 'Please wait...')
start(do_stuff, dialog)
dialog.ShowModal()
app.MainLoop()
if __name__ == '__main__':
main()
关于python - 调用 app.MainLoop() 后更新 wxPython 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943339/