python - 如何从 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输出一个值。
解决方案
我不能用串行测试,但下面的例子应该是一个足够清楚的例子来帮助你。
我们可以使用 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()
推荐阅读
- php - MySQL / PHP - 在逗号分隔的列上搜索
- php - 我需要从两个短语之间的字符串中获取一部分,正则表达式解决方案会很棒
- swift - 在表格视图中使用未解析的标识符“部分”
- flutter - 将 int 放在内置函数中不会改变 dice 的图像,但是当将它移到 @override 上面时它可以工作,dice 图像会改变。为什么?
- javascript - 在通过 websocket 发送之前拆分缓冲区是个好主意吗?
- ios - 当名称包含搜索栏文本时如何更改单元格的背景?
- entity-framework - 实体框架 6 - 错误:1109 属性未映射
- java - Android导航抽屉点击事件问题
- javascript - 如何通过 JSON 数组中的 Loop 方法检查元素
- xml - 如何使用 PowerShell 在一个元素中获取整个节点?