In this program I get an error when I use a while True loop in the thread. Without the loop I get no error. Of course in the real program I don’t update a label continuously. Any idea what I’m doing wrong?
This is the program:
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()
And this is the error:
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
Any suggestions as to what I’m doing wrong? I’m (obviously) new to threading.
I am not exactly sure if that is what causes you problem, but… You should not interact with the GUI from another thread. You should use
wx.CallAfter(). I would consider adding sleep inside the loop also.wx.CallAfter() documentation says:
Updated code would than be:
Maybe you can also consider using wx.Timer.
BTW: Your code runs OK on my PC with Windows 7 and wxPython 2.8.