如何从tkinter滑块/标尺重复输出数据,以便通过串行通信将恒定的数字流发送到另一个设备?

2024-06-28 19:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我想做的是发送(串行)一个tkinter规模值大约每50毫秒(或尽可能频繁)。我想发送这个数据,即使滑块是静止的。这是为一个项目,我正在做,其中包括控制四架直升机通过树莓圆周率

我熟悉'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”毫秒输出一个值


Tags: 函数importvaluetkinterdefserialwindowcommand
1条回答
网友
1楼 · 发布于 2024-06-28 19:20:32

我不能测试串行,但下面的例子应该是一个足够清楚的例子,让你去

我们可以使用after不断地将数据发送到serial,然后我们可以使用scaler更新一个变量,然后将该变量发送到serial

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()

相关问题 更多 >