当来自网络的数据到达时,定期更改窗口颜色

2024-04-20 07:11:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个监听端口的小程序。我想实现的是,当来自网络的数据到达时,它应该将窗口颜色更改为该数据。我应该如何修改我的代码?你知道吗

#!/usr/bin/env python
from Tkinter import Tk
import time
import socket

window = Tk()
window.geometry("266x208")
window.title("Claculator")
window.configure(background='#ffffff')
window.mainloop() 


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "received data:", data #here comes the data color and it should call window color change
    conn.send(data)  # echo
conn.close()

Tags: 数据importipdatasizeportbuffersocket
1条回答
网友
1楼 · 发布于 2024-04-20 07:11:15

连接和Tkinter GUI需要一个无限循环,一个线程中不能有两个循环。最好的解决方案是为其中一个启动一个新线程。例如:

#!/usr/bin/env python
from Tkinter import Tk
import time
import socket
import threading

TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

class Connection(threading.Thread):
    def run(self):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((TCP_IP, TCP_PORT))
        s.listen(1)

        conn, addr = s.accept()
        print 'Connection address:', addr
        while 1:
            data = conn.recv(BUFFER_SIZE)
            if not data: break
            print "received data:", data #here comes the data color and it should call window color change
            self.window.config(background=data)
            self.window.update()
            conn.send(data)  # echo
        conn.close()

window = Tk()
window.geometry("266x208")
window.title("Claculator")
window.configure(background='#ffffff')
thread = Connection()
thread.window = window
thread.start() #start the connection loop
window.mainloop() #start Tkinter's loop

(完全未经测试)。你知道吗

相关问题 更多 >