实时 Tkinter 标签

Live Tkinter Labels

我有一个关于 tkinter 标签和 pymodbus 的问题。场景是,我正在尝试构建一个 GUI,程序借此连接到“串行客户端”或“从属”设备,并实质上轮询串行客户端寄存器。我正在尝试读取这些寄存器并将它们显示在我能够做到的 tkinter 标签上!但是,我想更进一步,让标签每秒更新一次。有问题的寄存器是传感器,所以我想在它们变化时捕获它们,并将它们显示在 GUI 上。到目前为止,这是已完成内容的简化版本。

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from pymodbus.client.sync import ModbusSerialClient

client = ModbusSerialClient(
    port="COM14",
    startbit=1,
    databits=8,
    parity="N",
    stopbits=2,
    errorcheck="crc",
    baudrate=38400,
    method="RTU",
    timeout=3)

root = Tk()
root.geometry("500x350")

res = client.read_holding_registers(address=50, count=1, unit=1)

value_1 = DoubleVar()
value_1.set(res.registers)

value_label = ttk.Label(root, textvariable = value_1, font = ("Arial", 25, "bold"))
value_label.place(x = 50, y = 50)

root.mainloop()

目前,程序连接到有问题的传感器并在程序加载时从寄存器中获取值,有没有办法每秒轮询一次值并更新?

提前致谢。

您可以使用.after()执行一个函数来每秒轮询寄存器:

...
value_1 = DoubleVar()
value_label = ttk.Label(root, textvariable=value_1, font=("Arial", 25, "bold"))
value_label.place(x=50, y=50)

def poll_register():
    res = client.read_holding_registers(address=50, count=1, unit=1)
    value_1.set(res.registers)
    # call poll_register() again one second later
    root.after(1000, poll_register) 

poll_register() # start polling register
...