我怎样才能从 tkinter slider/scale 重复输出,这样我就可以通过串行向另一个设备发送恒定的数字流?
How can I repeatedly output from a tkinter slider/scale so I can send a constant stream of numbers to another device via serial?
基本上我想做的是(通过串行)大约每 50 毫秒(或尽可能频繁)发送一个 tkinter 比例值。即使滑块静止,我也想发送此数据。这是我正在做的一个项目,其中包括通过 raspberry pi 控制四轴飞行器。
我熟悉 '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”毫秒输出一个值。
我无法用串行测试,但下面的例子应该是一个足够清晰的例子,可以让你继续。
我们可以使用 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()
基本上我想做的是(通过串行)大约每 50 毫秒(或尽可能频繁)发送一个 tkinter 比例值。即使滑块静止,我也想发送此数据。这是我正在做的一个项目,其中包括通过 raspberry pi 控制四轴飞行器。
我熟悉 '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”毫秒输出一个值。
我无法用串行测试,但下面的例子应该是一个足够清晰的例子,可以让你继续。
我们可以使用 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()