Python-从scale小部件发送常量串行数据

Python-从scale小部件发送常量串行数据,python,tkinter,Python,Tkinter,大家好,这个论坛和节目都是新来的。我有一个项目,它要求每秒通过串行端口发送tkinter标尺的值。我一直在竭尽全力想找到这个问题的答案。如有任何建议,将不胜感激。谢谢:- 编辑-当运行波纹管时,我得到一个带有刻度的tkinter窗口,但在向上移动刻度时,数据没有被推送到串行端口上 import serial from tkinter import * mGui = Tk () mGui.geometry(500x250) ser = serial.Serial(,'/dev/ttyUSB0'

大家好,这个论坛和节目都是新来的。我有一个项目,它要求每秒通过串行端口发送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()

您需要的是异步或线程生产者/消费者模式,本质上串行端口需要定期轮询以获取新的传入数据,并定期写入以获取传出数据

可以从stdlib队列模块中获得这方面的一般示例。您可以很容易地修改它,这样当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

嘿@LeeWright!欢迎来到SO。请更新你的问题,说明你已经做了什么,你得到了什么结果,以及为什么它不是你所期望的。这将提高你的问题质量,让其他有同样问题的用户发现问题,并使其更吸引人回答问题。享受谢谢我更新了我的问题太棒了!现在有人会更容易理解你的问题。。。祝你好运串行构造函数中有一个错误。。。你在这个问题上打错了,对吗?上面写着,/dev/ttyUSB0'应该是“/dev/ttyUSB0”对吧?很抱歉,这是个打字错误!谢谢你的回答!我需要一段时间才能理解这一切。正如我所说,我对这一切都是新手。你有没有可能解释一下这段代码的每一部分是什么,这样就更容易理解了?再次感谢