wxPython unexpected exit

kyosohma at gmail.com kyosohma at gmail.com
Fri Sep 7 09:42:20 EDT 2007


On Sep 7, 3:10 am, Jimmy <mcknight0... at gmail.com> wrote:
> 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!

If you use threads that update the GUI, you need to take a look at the
following wiki page:
http://wiki.wxpython.org/LongRunningTasks

I've used the techniques therein and they *just work*. I'm not sure if
you can set values on items in a list or not. I've tried that sort of
thing and sometimes it works and sometimes it doesn't.

The wxPython group is probably the best place to ask these questions
anyway: http://www.wxpython.org/maillist.php

Mike





More information about the Python-list mailing list