我想更新python gui上的arduino数据,但没有发生,请有人找出问题

时间:2019-01-08 11:39:45

标签: python tkinter arduino pyserial

我编写了这段代码以使用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的新手,所以请尽量简单一些,我将非常感谢

1 个答案:

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

输出:

enter image description here

请注意,我已经创建了自己的serial模块来模拟Python pyserial模块,并且返回的数据是随机生成的。因此,您应该修改代码以适合您的情况。