请教一个关于wxpython Thread的问题
大家好,最近在学习wxpython,现在想做个东西,服务器与客户端建立是socket通信,客户端给服务器发送一个命令,在服务器端执行一系列过程,客户端将服务器端的执行信息打印在客户端的界面上,信息是根据服务器端的执行情况动态显示的,该如何实现?如果存在多个并行服务器,又应该如何处理?谢谢
现在建立socket通信已经实现,发送命令和返回信息也能实现。
[解决办法]
工作线程(非ui线程)调用wx.CallAfter以发消息方式更新界面,不要主动调用其他ui函数,不然程序会崩溃...
[解决办法]
WorkerThread似乎多余无用,适度改写autotest里的输出语句,直接在gui里调用即可。下面是一个简单代码,起10个线程不停滴回显数据在图形界面上。貌似python或者wx的日志模块都适合你这个场景,看看相关帖子:http://bbs.csdn.net/topics/390381049
import wx
import threading
import time
import random
from datetime import datetime
def worker(n, log):
i = 0
while 1:
time.sleep(random.uniform(1, 10))
msg = "echo %d from Thread #%d" % (i, n)
log.write(msg)
i += 1
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
self.textctrl = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.run()
def write(self, msg):
stamp = datetime.now().strftime('%H:%M:%S.%f')[:-3]
msg = stamp + ': ' + msg.rstrip() + '\n'
wx.CallAfter(self.textctrl.AppendText, msg)
def run(self):
for i in range(10):
t = threading.Thread(target=worker, args=(i+1, self))
t.daemon =True
t.start()
app = wx.App(False)
frame = MyFrame()
frame.Show()
app.MainLoop()