Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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/5/reporting-services/3.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 3.x_User Interface_Tkinter - Fatal编程技术网

Python 3.x 如何在Tkinter中显示连续的解码字节串流?

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

我试图显示从我的设备到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(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小部件中显示流、解码来自未提供的未知源的流,还是仅仅获取流输出以完成需要使用它做的任何事情!