在线程中使用while循环时出现wxPython Pango错误
发布时间:2020-12-20 11:24:52 所属栏目:Python 来源:网络整理
导读:在这个程序中,当我在线程中使用while循环时出现错误.没有循环我没有错误.当然在实际程序中我不会连续更新标签.知道我做错了什么吗? 这是该计划: import wximport threadclass Example(wx.Frame): def __init__(self,parent): wx.Frame.__init__(self,paren
在这个程序中,当我在线程中使用while循环时出现错误.没有循环我没有错误.当然在实际程序中我不会连续更新标签.知道我做错了什么吗?
这是该计划: import wx import thread class Example(wx.Frame): def __init__(self,parent): wx.Frame.__init__(self,parent) self.InitUI() def InitUI(self): self.SetSize((250,200)) self.Show(True) self.text = wx.StaticText(self,label='',pos=(20,30)) thread.start_new_thread(self.watch,(self,None)) def watch(self,dummy,e): while True: self.text.SetLabel('Closed') def main(): ex = wx.App() Example(None) ex.MainLoop() if __name__ == '__main__': main() 这是错误: Pango:ERROR:/build/pango1.0-LVHqeM/pango1.0-1.30.0/./pango/pango- layout.c:3801:pango_layout_check_lines: assertion failed: (!layout->log_attrs) Aborted 关于我做错了什么的任何建议?我(显然)是线程新手. 解决方法
我不确定这是否是导致问题的原因,但是……你不应该从另一个线程与GUI交互.你应该使用
wx.CallAfter() .我会考虑在循环中添加睡眠.
wx.CallAfter()文件说:
更新的代码将是: import wx import thread import time class Example(wx.Frame): def __init__(self,e): while True: time.sleep(0.1) wx.CallAfter(self.text.SetLabel,'Closed') def main(): ex = wx.App() Example(None) ex.MainLoop() if __name__ == '__main__': main() 也许你也可以考虑使用wx.Timer. 顺便说一句:你的代码在我的电脑上使用Windows 7和wxPython 2.8运行正常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |