python-3.x - 在 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 框架上得到了什么:
如果您与第一张图片进行比较,它很接近,但实际上并不存在。
解决方案
将文本插入 ScrolledText 小部件的方法如下
s.insert("end","some_text that I want to insert")
s
是滚动文本小部件的名称(在您的情况下,这被混淆地称为滚动条)- insert 的第一个参数
"end"
告诉滚动文本小部件将新文本放在文本框中当前文本的末尾。 - insert 的第二个参数是您要插入的文本(在您的情况下为
val1
)。
推荐阅读
- angular - 如何在 Angular 项目中使用 Bootswatch?
- maven - 如何配置 pom.xml 以将 jooq 类生成到两个不同的包中?
- javascript - 从嵌套的对象数组中获取值
- c++ - 将项目设置为32位后找不到cout uint_32等
- python - 从别名导入时出现 ModuleNotFoundError
- javascript - 点击isso评论系统头像附近的“^”图标无法投票评论
- python - 无法导入 mysql.connector - ModuleNotFoundError:没有名为“mysql”的模块
- python - 数据帧中的多点(df['geometry'])键错误,但键存在。KeyError:13个geopandas
- numpy - 填充numpy数组而不循环所有索引
- javascript - 如何在使用 Selenide 自动化脚本时避免浏览器重定向?