首页 > 解决方案 > 在 tkinter 滚动条上显示串行传入数据

问题描述

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

这就是数据在 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 中,带有自动滚动功能 - 但首先我必须先走路才能跑步。

所有连续的“动作”都发生在我用称为“连续的东西”的评论标记的部分。

我的展示位置代码正确吗?

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 框架上得到了什么:

在此处输入图像描述

如果您与第一张图片进行比较,它很接近,但实际上并不存在。

标签: python-3.xtkinterserial-portpyserial

解决方案


将文本插入 ScrolledText 小部件的方法如下

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

推荐阅读