根据UDP消息显示图片

时间:2017-10-12 15:27:28

标签: python tkinter udp

我是Python的新手,我正在尝试编写一个程序,根据收到的UDP消息在接口上显示图像。 虽然我可以分开做两件事但我不能让它一起工作。 原因很简单,UDP监听器的while循环不允许tkinter的mainloop发生,我找不到让它工作的方法。 我也不确定代码的“删除”一面。

你能帮我找到解决方案吗?

不确定这是否重要,但这是在Raspberry Pi上运行。

这是代码:     来自tkinter进口*     导入套接字

root = Tk()
canvas = Canvas(root)
canvas.pack()

UDP_PORT = 11000
UDP_IP = ""

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))

photo1 = PhotoImage(file="test.gif")
photo2 = PhotoImage(file="ant.gif")

canvas.create_image(25, 25, image=photo1)

while True:
    data, addr = sock.recvfrom(1024)
    if data.decode() == "on":
        canvas.create_image(100, 125, image=photo2)
    elif data.decode() == "off":
        canvas.delete(photo2)

root.mainloop()

非常感谢你。 文斯。

1 个答案:

答案 0 :(得分:0)

如果你想在同一时间发生两件事,你需要运行2个线程。 python threading模块使这很容易。

from threading import Thread

root = Tk()
canvas = Canvas(root)
canvas.pack()

UDP_PORT = 11000
UDP_IP = ""

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))

photo1 = PhotoImage(file="test.gif")
photo2 = PhotoImage(file="ant.gif")

canvas.create_image(25, 25, image=photo1)

def listen_for_udp():
    while True:
        data, addr = sock.recvfrom(1024)
        if data.decode() == "on":
            canvas.create_image(100, 125, image=photo2)
        elif data.decode() == "off":
            canvas.delete(photo2)

t = Thread(target=listen_for_udp)
t.daemon = True
t.start()

root.mainloop()

(完全未经测试)