Philippe, Thanks a lot. I got the idea. Let me try it.
Ouyang Philippe Martin 写道: > Philippe Martin wrote: > > > zxo102 wrote: > > > >> Hi everyone, > >> I am using a python socket server to collect data from a socket > >> client and then control a image location ( wxpython) with the data, > >> i.e. moving the image around in the wxpython frame. > >> But the "app.MainLoop()" in wxpython looks like conflicting with > >> the "while 1:" in socket server. After I commented the > >> "app.MainLoop()", everything is working except two things: > >> 1. if I click anywhere on the screen with the mouse, the image is > >> gong and only the empty frame( or panel) is left. > >> 2. if I don't touch anything, the image is being moved around but > >> the previous images are left behind in the panel. > >> I guess that may be caused by "app.MainLoop()" commented. > >> Anybody knows how to make the two things work together? I really > >> appreciate your help. > >> My sample code is modified based on the wxpython demo: image.py. > >> socket client is also attached for your reference. > >> > >> Ouyang > >> > >> ################ socket server with wxpython ############## > >> > >> from Main import opj > >> import wx,string > >> class MMCS(wx.Frame): > >> def __init__(self): > >> self.bmp = wx.Image(opj('bitmaps/image.bmp'), > >> wx.BITMAP_TYPE_BMP) > >> self.bmp.SetMask(True) > >> wx.Frame.__init__(self, parent=None, title='monitoring system', > >> size=(500,600)) > >> self.panel = wx.Panel(self,-1) > >> > >> def monitor(self,x,y,angle): > >> bmp = self.bmp.Rotate(angle, (x,y), True,None) > >> bmp = bmp.ConvertToBitmap() > >> > >> wx.StaticBitmap(self.panel, -1, bmp, (x, y), (bmp.GetWidth(), > >> bmp.GetHeight())) > >> del bmp > >> > >> app = wx.PySimpleApp() > >> frame = MMCS() > >> frame.Show() > >> frame.monitor(50,10,0.0) > >> #app.MainLoop() > >> > >> # Server program > >> from socket import * > >> # Set the socket parameters > >> host = "192.168.0.2" > >> port = 21567 > >> buf = 1024 > >> addr = (host,port) > >> > >> # Create socket and bind to address > >> UDPSock = socket(AF_INET,SOCK_DGRAM) > >> UDPSock.bind(addr) > >> > >> # Receive messages > >> while 1: > >> data,addr = UDPSock.recvfrom(buf) > >> if not data: > >> print "Client has exited!" > >> break > >> else: > >> print "\nReceived message '", data,"'" > >> d = string.split(data, '-') > >> > >> frame.monitor(string.atoi(d[0]),string.atoi(d[1]),string.atof(d[2])) > >> if data == 'END': > >> print "end of moving the ship" > >> > >> # Close socket > >> UDPSock.close() > >> > >> ############# socket client ######################> > >> rom socket import * > >> import time > >> > >> # Set the socket parameters > >> host = "192.168.0.2" > >> port = 21567 > >> buf = 1024 > >> addr = (host,port) > >> > >> # Create socket > >> UDPSock = socket(AF_INET,SOCK_DGRAM) > >> def_msg = "===Enter message to send to server==="; > >> print "\n",def_msg > >> > >> # Send messages > >> while (1): > >> for i in range(100): > >> time.sleep(1) > >> data = "50-100-%s"%(0.1*i) > >> if(UDPSock.sendto(data,addr)): > >> print "Sending message '",data,"'....." > >> # Close socket > >> UDPSock.close() > > > > > > If you get rid of app.MaiLoop(), you basically get rid of all GUI events. > > You need to have you server in a separate thread. > > > > Philippe > PS: > > http://wiki.wxpython.org/index.cgi/LongRunningTasks -- http://mail.python.org/mailman/listinfo/python-list