3

我正在尝试使用Tkinter获取 Python GUI 窗口,以连续显示来自充当电压表的Arduino Uno板的数据流。使用我得到的代码,窗口将显示一个数据点,一旦窗口关闭,就会打开一个新窗口,其中包含下一个可用数据点。这是我一直在使用的代码:

import serial
from Tkinter import *
ser = serial.Serial('/dev/tty.usbmodem621')
ser.baudrate = 9600
while 1 == 1:
    reading = ser.readline()
    root = Tk()
    w = Label(root, text = reading)
    w.pack()
    root.mainloop()

我正在使用MacBook PropySerial包进行串行通信。如何让窗口自行刷新?

4

1 回答 1

2

我认为问题在于您正在为每个循环迭代创建一个新的根。试试这个代码:

import serial
from Tkinter import *
from time import sleep
ser = serial.Serial('/dev/tty.usbmodem621')
ser.baudrate = 9600

def update():
    while 1:
        reading.set(ser.readline())
        root.update()
        sleep(1)

root=Tk()
reading = StringVar()

w = Label(root, textvariable = reading)
w.pack()

root.after(1,update)    
root.mainloop()

这将“mainloop”设置为在一毫秒后调用“update”函数,并使用对变量“reading”的引用而不是它的实际值,从而允许对其进行更新。

我希望这有帮助。

于 2012-06-30T14:06:24.507 回答