2012-06-29 46 views
3

我正在尝试使用Tkinter来获取Python GUI窗口,从作为电压表的Arduino Uno板上持续显示数据流。使用我得到的代码,窗口将显示一个数据点,一旦窗口关闭,将打开一个新窗口,并显示下一个可用数据点。下面是我一直使用的代码:我使用的是MacBook Pro将Arduino连续数据流传输到Python

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

,并pySerial包我的串行通信。我如何让窗口自行更新?

回答

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

这将设置“主循环”调用“更新”功能的毫秒后,并使用变量“阅读”,而认为它的实际价值的参考,使它更新。

我希望这会有所帮助。

+0

它帮助了很多,谢谢。唯一需要做不同的事情是定义变量'reading',所以我在定义'update'之后做了这些,代码完全符合我的期望。 – user1491466

相关问题