wxPython unexpected exit

Thin Myrna
Fri Sep 7 15:03:45 CEST 2007


"Jimmy" <mcknight0219 at gmail.com> wrote in message 
news:1189152617.169438.296630 at d55g2000hsg.googlegroups.com...
> 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





More information about the Python-list mailing list