为什么改变背景颜色需要这么长时间?

时间:2015-01-18 02:45:56

标签: sockets python-2.7 wxpython python-multithreading

我遇到了一个简单程序的问题,该程序在通过TCP从另一台机器接收命令时会改变背景的颜色。改变颜色需要30秒。我通过本地网络运行它,所以它应该接近即时响应。我正在使用wxPython作为框架。我不认为我的代码过于复杂。相关代码:

    threader=threading.Thread(target=self.threading)
    threader.start()
def threading(self):
    host="192.168.1.122"
    port=4100
    s=socket.socket()
    s.bind((host,port))
    s.listen(1)
    c,addr=s.accept()
    print "Connected"
    while 1:
        data=c.recv(1024)
        if not data:
            break
        data=data.split("_")
        reading=int(data[1])
        pin=int(data[0])
        if pin == 1:
            if reading<20:
                self.front_left.SetBackgroundColour("red")
        elif pin == 2:
            if reading<20:
                self.front_right.SetBackgroundColour("red")
        elif pin == 3:
            if reading<20:
                self.bottom_left.SetBackgroundColour("red")
        elif pin == 4:
            if reading<20:
                self.bottom_right.SetBackgroundColour("red")
        else:
            pass
    c.close()

我需要这个代码是即时的,因为这将是一个机器人,它将告诉对象是否太近(这就是为什么当它在20厘米的物体内时有红色背景)。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试从线程更新wxPython代码。在wxPython中不支持/未定义此操作。您需要使用线程安全方法来更新wxPython UI,例如wx.CallAfter或wx.PostEvent。有关示例,请参阅以下wxPython wiki页面:

基本上,您需要在 if 语句中执行以下操作:

wx.CallAfter(self.bottom_right.SetBackgroundColour, "red")