Python 3.x 如何在Tkinter中显示连续的解码字节串流?
我试图显示从我的设备到Tkinter的文本小部件的串行输出,但是我得到了这个错误。如果我键入一个多行字符串,它将正常显示。 串行输出是一个解码的字节字符串,包含1000多行字符串字符Python 3.x 如何在Tkinter中显示连续的解码字节串流?,python-3.x,user-interface,tkinter,Python 3.x,User Interface,Tkinter,我试图显示从我的设备到Tkinter的文本小部件的串行输出,但是我得到了这个错误。如果我键入一个多行字符串,它将正常显示。 串行输出是一个解码的字节字符串,包含1000多行字符串字符 import tkinter as tk import serial ser = serial.Serial('COM3', timeout=1) ser.baudrate = 115200 def win_read(): while True: output = ser.read(1
import tkinter as tk
import serial
ser = serial.Serial('COM3', timeout=1)
ser.baudrate = 115200
def win_read():
while True:
output = ser.read(10000).decode('utf-8', 'ignore')
print(output)
return
root = tk.Tk()
S = tk.Scrollbar(root)
T = tk.Text(root, height=4, width=50)
S.pack(side=tk.RIGHT, fill=tk.Y)
T.pack(side=tk.LEFT, fill=tk.Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)
quote = win_read
T.insert(tk.END, win_read)
tk.mainloop()
我是否使用了正确的小部件?我也尝试在标签上打印整个输出,但没有成功。调用函数时缺少括号,这里是:quote=stream\u read。这就是小部件中显示的内容的来源。 您还通过打印将获得的流发送到stdout,而不是将其提供给GUI 下面是一个模拟流的示例:
import tkinter as tk
import random
def stream():
while True:
s = []
for _ in range(random.randrange(4)):
s.append(str(random.randrange(10)))
yield ''.join(s)
def stream_read(): # <- maybe have a buffer mechanism here? Impossible to say more without access to the stream.
st = stream()
return next(st)
def update_stream():
print('.')
T.insert(tk.END, stream_read())
root.after(100, update_stream)
root = tk.Tk()
S = tk.Scrollbar(root)
T = tk.Text(root, height=4, width=50)
S.pack(side=tk.RIGHT, fill=tk.Y)
T.pack(side=tk.LEFT, fill=tk.Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)
quote = stream_read()
T.insert(tk.END, quote)
update_stream()
tk.mainloop()
显然你没有读过这个问题,我不想显示一些随机数,我想显示我与设备串行通信的解码字节字符串。我没有遗漏任何括号,如果我的函数中有括号,我会得到以下错误:\u tkinter.TclError:错误的参数:应该是。!文本插入索引字符?标记列表字符标记列表…?。欢迎您!您询问如何显示连续的字符串流,因为您的代码正在显示!您还询问是否使用了正确的小部件,并提到您尝试了一个标签,但无法使其工作!您没有提供对流的访问,也没有提到任何关于解码流的内容,这就是为什么我提供了流的替代品!我按照你的要求回答了你的问题。我投票决定结束这个问题,因为不清楚它是关于在tkinter小部件中显示流、解码来自未提供的未知源的流,还是仅仅获取流输出以完成需要使用它做的任何事情!