2015-01-18 1 views
0

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

나는 즉시로이 코드가 필요합니다 (이는이 개체의 20cm 이내에 도착 빨간색 배경이 이유) . 어떤 도움이라도 대단히 감사하겠습니다!

답변

1

스레드에서 wxPython 코드를 업데이트하려고 시도하는 것 같습니다. 이 액션은 wxPython에서 지원되지 않거나 정의되지 않았습니다. 스레드 안전 메소드를 사용하여 wx.CallAfter 또는 wx.PostEvent와 같은 wxPython UI를 업데이트해야합니다. 몇 가지 예는 다음의 wxPython 위키 페이지를 참조하십시오 :

기본적으로, 당신은 당신의 경우 문이 그런 짓을 할 것이다 :

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

을 또한,에 경우에 따라 bacjground가 창이 다시 칠해 질 때까지 변경되지 않은 것처럼 보일 수 있습니다. 위의 내용이 도움이되지 않는 경우 SetBackgroundColour를 새 메서드로 이동하고 새로 고침을 호출 한 다음 해당 메서드를 호출 할 수도 있습니다. wx.CallAfter를 통한 ew 메소드. – RobinDunn

+0

좋은 지적. ** Refresh() ** 메소드에 대해 언급 했어야합니다. –

+0

Refesh()는 효과가 있습니다! 감사! – user3818089

관련 문제