Python Tkinter不更新变量

Python Tkinter不更新变量,python,tkinter,Python,Tkinter,如果这是一篇多余的帖子,我很抱歉,但我已经花了几个小时来寻找StackOverflow和其他来源的解决方案,这就是我的结局。好吧,应该行了 简单地说,我无法理解为什么我的变量不更新多次。当我运行这个程序时,它从“0.0”开始,并在time.sleep5之后更新为实际值,但只更新一次。理论上它应该实时更新 我知道你不能用我的Modbus从设备等重新创建我的开发环境,但是flow_unpack是一个很好的变量,因为它只打印到Tkinter窗口一次。如果是坏的,它将返回ValueError或其他内容。

如果这是一篇多余的帖子,我很抱歉,但我已经花了几个小时来寻找StackOverflow和其他来源的解决方案,这就是我的结局。好吧,应该行了

简单地说,我无法理解为什么我的变量不更新多次。当我运行这个程序时,它从“0.0”开始,并在time.sleep5之后更新为实际值,但只更新一次。理论上它应该实时更新

我知道你不能用我的Modbus从设备等重新创建我的开发环境,但是flow_unpack是一个很好的变量,因为它只打印到Tkinter窗口一次。如果是坏的,它将返回ValueError或其他内容。问题是:为什么不更新

import tkinter as tk
import time
import minimalmodbus
import serial
import struct

root = tk.Tk()
root.resizable(width=False, height=False)
root.geometry('{}x{}'.format(500, 500))

i = minimalmodbus.Instrument('/dev/ttyUSB0', 1)
i.serial.baudrate = 9600
i.serial.bytesize = 8
i.serial.parity = serial.PARITY_ODD
i.serial.stopbits = 1
i.serial.timeout = 1
i.debug = False

var = tk.DoubleVar()

label = tk.Label(root, textvariable=var)
label.pack()

mass_flow_rate = i.read_registers(registeraddress=246, numberOfRegisters=2,
    functioncode=3)
flow_ = [mass_flow_rate[0], mass_flow_rate[1]]
flow_pack = struct.pack('HH', flow_[0], flow_[1])
flow_unpack = round(struct.unpack('f', flow_pack)[0], 4)


def function():
    global flow_unpack
    var.set(flow_unpack)
    root.update()
    time.sleep(5)


root.after(2000, function)
root.mainloop()

在代码中更改此选项

def function():
    global flow_unpack
    var.set(flow_unpack)
    root.after(2000, function) # just add this for further calls
    # root.update() -> not needed, see Brian comment.
    # time.sleep(5) -> do you really need this? 
    # you will block the tkinter mainloop and your UI.

你是说var?为什么您希望它更新不止一次?var设置为flow_unpack with.set,就我而言,它们是相同的。由于update函数和使用root.aftertime调用所述函数,它应该更新多次。使函数在[time]毫秒后调用一次。以这种方式使用after时,无需调用root.update。在返回此函数和下次运行该函数之间的时间内隐式调用root.update。谢谢@BryanOakley,我已经注释掉了它