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 -- http://mail.python.org/mailman/listinfo/python-list