调用后更新wxPython进度条应用程序主循环()

2024-10-01 11:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个执行计算的python脚本,并且为弹出的wxPython进度条创建了一个类。目前我有:

app=wx.App()
progress = ProgressBar()
app.MainLoop()

for i in xrange(len(toBeAnalysed)):
    analyse(toBeAnalysed[i])
    progress.update(i/len(toBeAnalysed)*100)

现在,由于明显的原因,这个例子不起作用。有什么办法我可以运行应用程序主循环()在另一个线程中,但在计算完成时仍传递进度(和.update()它)?在

谢谢你的帮助。在


Tags: 进度条in脚本appforlenwxpythonupdate
1条回答
网友
1楼 · 发布于 2024-10-01 11:23:28

您应该在后台线程中运行逻辑,并使用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()

相关问题 更多 >