在 tkinter 滚动条上显示串行传入数据

Display serial incoming data on tkinter scrollbar

我下载了一个小的 arduino 程序,以便它产生串行数据。 我的目标(第一次迭代)是创建一个应用程序来替换 arduino IDE serial - 因为我只想读取串行数据。

这是数据在 arduino IDE 串行接口上​​的样子。

到目前为止,这是我的代码:

import tkinter as tk
import tkinter.ttk as ttk
import serial.tools.list_ports
from tkinter import scrolledtext 
#new stuff
import time
import serial
import threading
import continuous_threading


#to be used on our canvas
HEIGHT = 700
WIDTH = 800

#hardcoded baud rate
baudRate = 9600

#Serial Stuff-----------------------------------------
ser = serial.Serial('COM16', baudRate)
val1 = 0
index = []
def readSerial():
    global val1
    ser_bytes = ser.readline()
    ser_bytes = ser_bytes.decode("utf-8")
    val1 = ser_bytes
    index.append(val1)
    disp = tk.Label(frame2, text=index[0])
    disp.config(font=("TkDefaultFont", 8))
    disp.place(relx = 0.1, rely=0.3, relwidth=0.3, relheight=0.5)

t1 = continuous_threading.PeriodicThread(0.5, readSerial)


# --- main ---
root = tk.Tk() #here we create our tkinter window
root.title("Sensor Interface")

#we use canvas as a placeholder, to get our initial screen size (we have defined HEIGHT and WIDTH)
canvas = tk.Canvas(root, height=HEIGHT, width=WIDTH)
canvas.pack()


# --- frame 2 ---
frame2 = tk.Frame(root, bg='#80c1ff') #remove color later
frame2.place(relx=0, rely=0.1, relheight=1, relwidth=1, anchor='nw')

# make a scrollbar
scrollbar = scrolledtext.ScrolledText(frame2)
scrollbar.place(relx=0, rely=0, relheight=1, relwidth=1, anchor='nw')
# --- frame 2 ---

t1.start()
root.mainloop() #here we run our app

我有一个 frame2,它是一个滚动文本,我希望我的数据出现(我在它上面还有另一个框架,我在这里删除了它,这样我就不会用不必要的代码混淆人们)。

理想情况下,我希望数据像在 arduino IDE 中那样显示,并带有自动滚动功能 - 但首先我必须先走才能 运行。

所有系列“动作”都发生在我用注释标记为 'Serial stuff' 的部分。

我的展示位置代码是否正确?

disp = tk.Label(frame2, text=index[0])
disp.config(font=("TkDefaultFont", 8))
disp.place(relx = 0.1, rely=0.3, relwidth=0.3, relheight=0.5)

我希望文本框中的每一行都换行,就像我的第一张图片一样

编辑:我听从了 scotty3685 的建议(非常感谢先生!)但看看我现在在我的 tkinter 框架上得到了什么:

如果与第一张图片比较,它很接近但不是真的。

在ScrolledText widget中插入文本的方法如下

s.insert("end","some_text that I want to insert")
  • s 是滚动文本小部件的名称(在您的情况下是 混淆地称为滚动条)
  • 要插入的第一个参数"end" 告诉滚动文本小部件将新文本放在末尾 文本框中的当前文本。
  • 要插入的第二个参数是 您要插入的文本(在您的例子中,val1)。