加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

线程,wxpython和状态栏

发布时间:2020-12-20 13:21:56 所属栏目:Python 来源:网络整理
导读:我正在做一个我正在使用wxStatusBar的程序,当下载开始时我开始这样的子线程: def OnDownload(self,event): child = threading.Thread(target=self.Download) child.setDaemon(True) child.start() 下载是另一个没有参数的功能(自我除外).我想从那里更新我的
我正在做一个我正在使用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

解决方法

你是如何更新状态栏的?

我认为你应该没问题,如果你创建一个自定义事件,然后通过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)

Here’s some more detail from the wxPython wiki.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读