我有一個關于 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()
目前,程式連接到有問題的傳感器并在程式加載時從暫存器中獲取值,有沒有辦法每秒輪詢該值并更新?
提前致謝。
uj5u.com熱心網友回復:
您可以使用.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
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446473.html
上一篇:當用戶單擊按鈕并生成新值時,如何獲取要洗掉的先前Tkinter值?
下一篇:tkinter中奇怪的滾動條UI
