嗨,这个论坛的新手和一般的编程。我有一个项目,要求每秒通过串口发送一个tkinter规模的值。我一直在试着寻找这个问题的答案。任何意见,将不胜感激。谢谢:-)
编辑 - 当运行波纹管时,我得到一个带有刻度的tkinter窗口,但是在移动刻度时,数据没有通过串口推送。
import serial
from tkinter import *
mGui = Tk ()
mGui.geometry(500x250)
ser = serial.Serial(,'/dev/ttyUSB0',9600)
def scale1():
ser.write(s.get)
s=Scale (mGui, from_=0, to=100, orient=HORIZONTAL, command=scale1)
s.pack()
答案 0 :(得分:0)
您想要的是异步或线程生产者/消费者模式,本质上需要定期轮询串行端口以获取新的传入数据,并定期写入传出数据。
可以从stdlib Queue模块中获取此通用示例。您可以轻松地修改它,以便当Scale()的值发生更改时,它会将新值放入队列中 - 并拥有一个专用线程来读取新数据(如果可用)或写入“串口到串口。
您可能会遇到的问题是,如果您非常快速地移动Scale控件,那么队列将获得更多的值,而不是及时写入。
如果是这种情况,您可能只想完全跳过队列,只需通过定期写入Scale()的当前值来使串行读/写器工作(0.02秒延迟可能是你能得到的最小,但如果你真正连接@ 9600波特,只需将写入间隔修改为不能写入超过可以物理放入串行缓冲器的UART。
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done