我编写了这段代码以使用dht11温度和湿度传感器读取arduino数据,并想在tkinter gui上显示数据,我成功上传了数据,但没有更新,我不知道为什么请一些指导我解决这个问题< / p>
import tkinter as tk
import serial
Serial_data = serial.Serial('COM39',9600)
data = Serial_data.read()
root = tk.Tk()
root.geometry('500x350')
label = tk.Label(root,text="hello").grid(row=0)
label1 = tk.Label(root,text=data)
label1.grid(row=1,column=1)
label1.update()
root.mainloop()
我是python的新手,所以请尽量简单一些,我将非常感谢
答案 0 :(得分:0)
由于您仅致电Serial_data.read()
一次,并且没有更新标签,因此不会更新任何内容。您应该使用.after()
定期读取数据,如下所示(仅作为示例):
import tkinter as tk
import serial
Serial_data = serial.Serial(port='COM3', baudrate=9600, timeout=0.5) # better has timeout set, otherwise may block the program
def read_data():
# assume the data format: humidity / temperature
data.set(Serial_data.readline().decode('ascii').strip()) # assume data is terminated by '\n'
print('"{}" read'.format(data.get()))
root.after(500, read_data) # period depends on how frequent the arduino writes data to its serial port
root = tk.Tk()
data = tk.StringVar()
tk.Label(root, text='Humidity / Temperature:').grid(row=0, column=0, padx=5, pady=5)
tk.Label(root, textvariable=data, bd=2, relief='solid', width=20, fg='black', bg='white').grid(row=0, column=1, padx=5)
read_data()
root.mainloop()
输出:
请注意,我已经创建了自己的serial
模块来模拟Python pyserial
模块,并且返回的数据是随机生成的。因此,您应该修改代码以适合您的情况。