首页 > 解决方案 > 如何从 tkinter 滑块/刻度重复输出,以便我可以通过串行将恒定的数字流发送到另一台设备?

问题描述

基本上我想做的是大约每 50 毫秒(或尽可能频繁地)发送(通过串行)一个 tkinter 比例的值。即使滑块静止,我也想发送这些数据。这是针对我正在做的一个项目,其中包括通过树莓派控制四轴飞行器。

我熟悉 'get()' 函数和 'command =' 函数,但是我不知道如何利用它们来输出重复值。

import tkinter as tk
import serial

def outputValue(value):
    print(value)
    ser.write(value.encode())

def background(window, color):
    window.configure(bg = color)
    scale = tk.Scale(window, from_= 0, to= 20, command = outputValue)
    scale.pack()

ser = serial.Serial('/dev/ttyUSB0', 9600)
window = tk.Tk()
window.title("Drone Control")
background(window, "black")
window.mainloop()

这会在滑块移动时输出一个值,因此除非您将滑块移开并移回某个位置,否则您永远不会得到重复的数字。

完美的输出将是每'x'ms输出一个值。

标签: pythontkinterpyserial

解决方案


我不能用串行测试,但下面的例子应该是一个足够清楚的例子来帮助你。

我们可以使用 after 不断地将数据发送到串行,然后我们可以使用您的缩放器更新一个变量,然后将其发送到串行。

import tkinter as tk
# import serial

tracked_var = 0


def outputValue():
    print(tracked_var)
    #ser.write(value.encode())
    window.after(500, outputValue)


def update_tracked_variable(value):
    global tracked_var
    tracked_var = value


def background(color):
    window.configure(bg=color)
    scale = tk.Scale(window, from_=0, to=20, command=update_tracked_variable)
    scale.pack()


#ser = serial.Serial('/dev/ttyUSB0', 9600)
window = tk.Tk()
window.title("Drone Control")
background("black")
outputValue()
window.mainloop()

推荐阅读