"Jimmy" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Hi, wxPython is cool and easy to use, But I ran into a problem > recently when I try to write a GUI. > The thing is I want to periodically update the content of StatixText > object, so after create them, I pack them into a list...the problem > comes when I later try to extract them from the list! I don't know > why? > my code is as following: > > import wx, socket > import thread > > class MyFrame(wx.Frame): > > firstrun = 0 > def __init__(self): > wx.Frame.__init__(self, None, -1, 'Notifier') > self.panel = wx.Panel(self, -1) > self.length = 50 > self.scale = 0.6 > self.count = 5 > self.size = wx.Frame.GetSize(self) > self.distance = self.size[1] / self.count > self.labellist = [] > self.gaugelist = [] > > def ParseAndDisplay(self, data): > print "Successful access to main Frame class" > print 'And receive data: ', data > if MyFrame.firstrun == 0: > print 'First time run' > items = 3 > for i in range(items): > self.labellist.append(wx.StaticText(self.panel, -1, data+str(i), > (150, 50+i*20), (300,30))) > MyFrame.firstrun = 1 > else: > self.labellist[0].SetLabel('AAA')//PROGRAM WILL ABORT HERE!!! > self.labellist[1].SetLabel("Guo") > self.labellist[2].SetLabel("Qiang") > > > class NetUdp: > > def __init__(self): > self.port = 8081 > self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) > self.s.bind(("", self.port)) > print "Listening on port", self.port > > def recvdata(self): > data, addr = self.s.recvfrom(1024) > return data > > > def netThread(): > netudp = NetUdp() > while True: > data = netudp.recvdata() > frame.ParseAndDisplay(data) > > if __name__ == '__main__': > firstrun = 0 > app = wx.PySimpleApp() > frame = MyFrame() > frame.Show() > # start network thread first > id = thread.start_new_thread(netThread, ()) > # main wxpython loop begins > app.MainLoop() > > I know the code is ugly, but can anyone really save me here! >
Communication OS thread -> wx has to be done in a certain way. You must not do this directly, i.e. you must not call wx code from w/i an OS thread. See the wxPython Demo for an example of what you want to do: Process and Events -> Threads. Cheers Thin -- http://mail.python.org/mailman/listinfo/python-list