我正在尝试线程wx.ProgressDialog。我有一个进度线程课程
class Progress(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): max = 1000000 dlg = wx.ProgressDialog("Progress dialog example", "An informative message", maximum = max, parent=None, style = wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | wx.PD_ESTIMATED_TIME | wx.PD_REMAINING_TIME ) keepGoing = True count = 0 while keepGoing and count < max: count += 1 wx.MilliSleep(250) if count >= max / 2: (keepGoing, skip) = dlg.Update(count, "Half-time!") else: (keepGoing, skip) = dlg.Update(count) dlg.Destroy()
当我按下一个按钮时会被调用
class MiPPanel ( wx.Panel ): [...] def runmiP(self, event): thread1 = Progress() thread1.start()
当我运行thread1.start()时,我收到100此类警告,2012-12-01 00:31:19.215 Python[3235:8807] *** __NSAutoreleaseNoPool(): Object 0x11a88f300 of class NSConcreteAttributedString autoreleased with no pool in place - just leaking并且进度条不显示。
2012-12-01 00:31:19.215 Python[3235:8807] *** __NSAutoreleaseNoPool(): Object 0x11a88f300 of class NSConcreteAttributedString autoreleased with no pool in place - just leaking
如何在wxPython中使用线程制作进度条?
所有wxPython小部件和操作都应在单个线程中。如果要让对话框由另一个线程控制,则必须使用计时器和队列从另一个线程向对话框发送消息。
我了解的另一种方法应该起作用(我尚未测试过),它可以在另一个线程中为您的对话框创建一个完全独立的wxApp。您将不得不仍然以某种方式与主线程进行通信。
编辑: 这是更多信息的链接。它在底部有一些有关使用wx.CallAfter更新工作线程进度的信息。它还显示了如何在单独的线程中运行单个函数而不创建单独的类。
wxPython线程