Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Tkinter串行读取_Python_Python 3.x_Tkinter_Serial Port - Fatal编程技术网

Python 3.x Tkinter串行读取

Python 3.x Tkinter串行读取,python,python-3.x,tkinter,serial-port,Python,Python 3.x,Tkinter,Serial Port,我无法通过串行连接读取来自arduino的串行数据。为了解决串行和gui需要同时运行的问题,我使用.after函数每100ms调用一次更新串行。然而,当我运行这段代码时,没有弹出窗口,并且我得到一个错误,说我已经超过了最大递归深度。这是我的密码: ''' Created on Nov 23, 2014 @author: Charlie ''' if __name__ == '__main__': pass import serial from tkinter import * s

我无法通过串行连接读取来自arduino的串行数据。为了解决串行和gui需要同时运行的问题,我使用.after函数每100ms调用一次更新串行。然而,当我运行这段代码时,没有弹出窗口,并且我得到一个错误,说我已经超过了最大递归深度。这是我的密码:

'''
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()
在func
update()
中删除循环
root.after(100,update())
。这:

def update():
    c = StringVar()
    c=ser.readline()
    theta.set(c)

您应该使用root.after(100,update)。注意
update
之后缺少括号。使用括号将
update
的结果发送到
after
调用,但要计算结果,必须运行
update
,其中包含另一个对
after
的调用,该调用需要
update
的结果,依此类推

另见

另外,为什么每次调用
update
函数时都要创建一个新的
StringVar

c=ser.readline()
无论如何都会覆盖
c
,因此您最好删除该行。

我的目的是在调用该行时重置下一个更新调用。否则,我的更新不会只被调用一次吗?在调用主循环之前一次。如果读取func
update()
中的数据以更好地更新标签,则不会有无限循环反复调用它。这是:“w.after(100,update())”,如果是func,则返回值。