如何从 tkinter 滑块/刻度重复输出,以便我可以通过串行向另一台设备发送恒定的数字流?
Posted
技术标签:
【中文标题】如何从 tkinter 滑块/刻度重复输出,以便我可以通过串行向另一台设备发送恒定的数字流?【英文标题】:How can I repeatedly output from a tkinter slider/scale so I can send a constant stream of numbers to another device via serial? 【发布时间】:2019-09-26 18:40:48 【问题描述】:基本上我想做的是大约每 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 输出一个值。
【问题讨论】:
我会在一个变量中跟踪您的比例,然后使用由after()
循环管理的另一个函数来监控该变量并不断发送数据。
你能给我举个例子吗@Mike-SMT
【参考方案1】:
我无法使用串行进行测试,但下面的示例应该是一个足够清晰的示例,可以让您继续前进。
我们可以使用 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()
【讨论】:
以上是关于如何从 tkinter 滑块/刻度重复输出,以便我可以通过串行向另一台设备发送恒定的数字流?的主要内容,如果未能解决你的问题,请参考以下文章