我制作了一个Python脚本,它可以让我与arduino交流,而且我已经完成了通信,但我想用Tkinter创建一个漂亮的GUI。我已经制作了一个代码来设置它,但它会让我感到不安,所以在我给Python脚本提供一个串行输入之前我不会按任何按钮。 Wonse我给脚本一个输入它解冻,我可以使用它。但我不想发送串行输入以解冻GUI。肯定有更好的办法?!我使用的是Python 3.4。
我目前的代码:
from tkinter import *
import serial, os, time
ser = serial.Serial("/dev/ttyACM0", 9600)
root = Tk()
root.geometry("300x300")
def onled():
ser.write(b'1')
ledstate.config(text="Led is: On")
def offled():
ser.write(b'2')
ledstate.config(text="Led is: Off")
switchstate =Label(root, text="Switch is: Off")
switchstate.place(x=10, y=3)
ledon = Button(root, text="ON", command=onled)
ledon.place(x=100, y=16)
ledoff = Button(root, text="OFF", command=offled)
ledoff.place(x=150, y=16)
ledstate = Label(root, text="Led is: Off")
ledstate.place(x=10, y=20)
def head():
serialInput = ser.readline()
print(serialInput)
if serialInput == b'1001\r\n':
switchstate.configure(text="Switch is: On")
if serialInput == b'1002\r\n':
switchstate.configure(text="Switch is: Off")
root.update_idletasks()
root.after(1000, head)
root.after(1000, head)
root.mainloop()
谢谢!
答案 0 :(得分:0)
Tkinter是单线程的。如果ser.readline()
在等待数据读取时阻塞,则是,GUI将冻结。如果是这种情况,您需要将其设置为非阻塞,或者在另一个线程中执行读取,并使用线程安全队列将数据传回GUI。