Поскольку вы звонили 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
, и возвращаемые данные генерируются случайным образом. Поэтому вам следует изменить код в соответствии с вашей ситуацией.