3

Tkinterを使用して Python GUI ウィンドウを取得し、電圧計として機能するArduino Unoボードからのデータ ストリーミングを継続的に表示しようとしています。私が入手したコードでは、ウィンドウに 1 つのデータ ポイントが表示され、ウィンドウが閉じられると、新しいウィンドウが開き、次の使用可能なデータ ポイントが表示されます。これが私が使用しているコードです:

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 Proと、シリアル通信用のpySerialパッケージを使用しています。ウィンドウを更新するにはどうすればよいですか?

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

これにより、ミリ秒後に「update」関数を呼び出すように「mainloop」が設定され、実際の値ではなく変数「reading」への参照が使用され、更新できるようになります。

これが役立つことを願っています。

于 2012-06-30T14:06:24.507 に答える