how to make python socket server work with the app.MainLoop() in wxpython?

zxo102 zxo102 at gmail.com
Sun Jul 30 10:18:36 EDT 2006


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()




More information about the Python-list mailing list