使用pyserial和Arduino时遇到TkInter的问题

时间:2017-06-19 08:42:02

标签: python-3.x user-interface tkinter arduino pyserial

我是Python新手,我使用pyserial从Arduino读取数据并使用TkInter创建一个GUI,它在GUI的文本框中显示来自arduino的数据。

我正在使用这个Python代码:

from tkinter import *
from tkinter import ttk
import serial
import time

def disp():
    ser = serial.Serial('COM1', baudrate = 9600, timeout=1)
    time.sleep(1)
    arduinoData = (ser.readline().strip())
    a=arduinoData.decode('utf-8')
    dispe.delete(0,"end")
    dispe.insert(0, a)

def dis(event):
    disp()

root=Tk()
button=Button(root,text="press")
button.bind("<Button-1>",dis)
button.pack(side=LEFT)
dispe=Entry(root)
dispe.pack(side=LEFT)
root.mainloop()

这段代码非常好用。当我单击GUI上的按钮时,它会显示从Arduino收到的值。此程序要求用户反复点击以获取值,但我想添加一个while循环,以便我不需要连续点击一次又一次。点是让用户只点击按钮一次。

但是当我在while True:之后插入time.sleep循环以不断更新从Arduino接收的值时,文本框中没有任何内容显示...

1 个答案:

答案 0 :(得分:0)

这是正确的代码: -

from tkinter import *
from tkinter import ttk
import serial
import time


def disp():

    ser = serial.Serial('COM1', baudrate = 9600, timeout=1)


    time.sleep(1)

    arduinoData = (ser.readline().strip())
    a=arduinoData.decode('utf-8')

    dispe.delete(0,"end")
    dispe.insert(0, a)
    root.after(1, disp)    

def dis(event):
    root.after(0, disp)

root=Tk()

L1 = Label(root, text="Press the button to get data from the arduino       ")
L1.pack(side=LEFT)

button=Button(root,text="press")
button.bind("<Button-1>",dis)
button.pack(side=LEFT)

dispe=Entry(root)
dispe.pack(side=LEFT)

root.mainloop()