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