我正在做一个我正在使用wxStatusBar的程序,当下载开始时我开始这样的子线程:
def OnDownload(self, event):
child = threading.Thread(target=self.Download)
child.setDaemon(True)
child.start()
下载是另一个没有参数的功能(自我除外)。我想从那里更新我的状态栏,其中包含有关下载进度的一些信息,但是当我尝试这样做时,我经常会遇到Xwindow,glib和segfaults错误。有什么想法解决这个问题吗?
已解决:我只需要在更改线程内部GUI中的内容和wx.MutexGuiLeave()完成之前包含wx.MutexGuiEnter()。例如
def Download(self):
#stuff that doesn't affect the GUI
wx.MutexGuiEnter()
self.SetStatusText("This is a thread")
wx.MutexGuiLeave()
这就是全部:D
答案 0 :(得分:1)
大多数人都被定向到wxPython wiki:
http://wiki.wxpython.org/LongRunningTasks
我还在这里写了一篇关于这个主题的文章:
http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
我认为我以前从未见过你的解决方案。
答案 1 :(得分:0)
您如何更新状态栏?
我认为如果您创建自定义事件,然后通过wx.PostEvent
发布它以通知GUI线程中的框架/状态栏,您应该没问题。
对于状态栏中的下载进度,您可能希望事件看起来像这样:
DownloadProgressEvent, EVT_DL_PROGRESS = wx.lib.newevent.NewEvent()
# from the thread...
event = DownloadProgressEvent(current=100, total=1000, filename="foo.jpg")
wx.PostEvent(frame, event)
# from the frame:
def OnDownloadProgress(self, event):
self.statusbar.update_dl_msg(event.current, event.total, event.filename)