我在通过串行连接读取来自arduino的串行数据时有困难。为了解决串行和gui需要同时运行的问题,我使用.after函数每100 to调用一次更新序列。但是,当我运行这段代码时,不会弹出任何窗口,并且我会收到一个错误,说明我已经超过了最大递归深度。这是我的代码:
'''
Created on Nov 23, 2014
@author: Charlie
'''
if __name__ == '__main__':
pass
import serial
from tkinter import *
ser = serial.Serial('COM8')
ser.baudrate = 9600
def update():
c = StringVar()
c=ser.readline()
theta.set(c)
root.after(100,update())
root=Tk()
theta = StringVar()
w = Label(root, textvariable = theta)
w.pack()
root.after(100,update())
root.mainloop()发布于 2014-11-24 09:17:45
您应该使用root.after(100, update)。注意在update之后缺少括号。使用括号将update的结果发送给after调用,但是要计算结果,必须运行update,其中包含对after的另一个调用,该调用需要update的结果等等。
另外,为什么每次调用StringVar函数时都要创建一个新的update?
无论如何,c = ser.readline()都会覆盖c,所以您最好还是删除这一行。
发布于 2014-11-24 06:40:56
在func update()中删除循环root.after(100,update())。这是:
def update():
c = StringVar()
c=ser.readline()
theta.set(c)https://stackoverflow.com/questions/27098922
复制相似问题