免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7331 | 回复: 7
打印 上一主题 下一主题

wxpython中使用thread的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-04 01:12 |只看该作者 |倒序浏览
为了自动更新wxpython程序中的文本数据(wx.StaticText).  而又不影响交互操作。。
程序利用 wx.Notebook 来分页

我使用
import thread
thread.start_new(func,())
来新开线程生成新数据, 其中 func  除了生成数据外还 通过访问 frame中的 wx.StaticText.SetLabel()
来使得新的数据能够在界面中显示。
这部分功能运行良好。

但问题随之而来。   只要新线程通过 wx.StaticText.SetLabel() 来更新了数据。

同一窗口中不同页中的 wx.Choice 就不能正常显示弹出菜单。  而这个wx.Choice所用到的数据和 func 更新的数据是毫无关联的。。

线程结束后,问题仍然存在。 能刷新的都刷新了(frame,panel,page,choice)。问题也仍然存在。

被这个问题困扰了好久。 就算放弃wx.Notebook, 使用MDIFrame 分页,也不行。


请问大家有解决思路吗?   谢谢。

[ 本帖最后由 lvscar 于 2006-9-4 01:14 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-09-04 15:11 |只看该作者
"不要在子线程中进行GUI的更新处理,所有的GUI的更新全部由GUI线程(主线程)来完成"     

limodou  blog上的这句话 点中我问题的要害了。

论坛徽章:
0
3 [报告]
发表于 2006-09-04 15:15 |只看该作者
可以尝试通过事件来更新label,而不是直接去调用SetLabel, 参考一下wxpython中demo里有一个多线程的例子。

论坛徽章:
0
4 [报告]
发表于 2006-09-04 16:16 |只看该作者
哈   终于搞定这困扰我3天的问题。。   
心得: 我利用thread是想在不中断界面交互性的情况下。在新线程中启动一个time.sleep()  计时器。 间隔一定的时间更新 界面信息。 当时不知道 wxpython 早已准备好了 wx.Timer 来替代在新线程中的time.sleep。  也不知道 wxpython不能在新线程中进行GUI更新处理。 wxpython in Action 中这么重要的章节都看漏。。。 自我批评10次。

thread.start_new(self.RefreshThread,( ))
def RefreshThread(self):
      while 1:
            time.sleep(5)
            self.refreshFan()
            self.refreshStats()
这是我之前引起问题解决方法

现在的处理方法:
self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER,self.OnTimer,self.timer)
        self.timer.Start(5000)
def OnTimer(self,evt):
        self.refreshFan()
        self.refreshStats()

论坛徽章:
0
5 [报告]
发表于 2006-09-04 16:39 |只看该作者
在线程中更新GUI的一个简单的方法就是调用wx.CallAfter,现在我的 UliPad 中大量使用它。它的作用就是注册新的事件,然后将wx.CallAfter()所指定的函数注册到新事件处理句柄中,然后通过向系统事件队列发送新的消息。这样当新清息被处理时,指定的函数将在主线程中执行。因此你仍然可以使用线程来处理,只是在需要更新GUI时使用wx.CallAfter即可。

论坛徽章:
0
6 [报告]
发表于 2006-09-04 16:46 |只看该作者
恩。。   我也想到,幸好我需要定时执行的代码只消耗很少的运行时间。 不然利用wx.Timer在主进程中运行肯定会造成GUI交互延时。

论坛徽章:
0
7 [报告]
发表于 2006-09-08 15:40 |只看该作者
恩,刚看到wx.CallAfter,感觉不错

论坛徽章:
0
8 [报告]
发表于 2011-04-24 02:51 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP