我有一个执行计算的 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)