无法更新 Tkinter 中的值

Unable to update value in Tkinter

我已经为我的最后一年项目工作了一段时间,但在过去的一周里有点卡住了

我正在设计一个温度控制器,到目前为止,温度显示在主屏幕上,还有一些其他元素

但我遇到的问题是温度仅保持在程序首次启动时的值 运行(它不会改变值)

下面是我正在努力处理的部分代码:

from gpiozero import MCP3008

adc = MCP3008(channel =0, device =0)

voltage = 3.3 * adc.value

ActualTemp = voltage * 100

ACTEMP ='{:.2f}'.format(ActualTemp)


ttk.Label(mainframe, text= ACTEMP).grid(column=2, row=2, sticky=(W, E))

我已经尝试搜索和猜测了好几天,但找不到任何东西

如有任何帮助,我们将不胜感激

谢谢

完整代码如下:

from tkinter import *
from tkinter import ttk
import RPi.GPIO as GPIO
from gpiozero import MCP3008

adc = MCP3008(channel =0, device =0)
voltage = 3.3 * adc.value
ActualTemp = voltage * 100
ACTEMP ='{:.2f}'.format(ActualTemp)

FanSpeedDigital = MCP3008(channel =1, device =0)
FanSpeedAnalogue1 = 3.3 * 30.3030303 * FanSpeedDigital.value
FanSpeedAnalogue ='{:.2f}'.format(FanSpeedAnalogue1)


root = Tk()
mainframe = ttk.Frame(root, padding="3 6")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))

mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

root.title("Circulation Water Temperature Regulator")


ttk.Label(mainframe, text="Circulation Water Temperature").grid(column=1, row=1, sticky=(W, E))


ttk.Label(mainframe, text="Actual Temp").grid(column=1, row=2, sticky=(W, E))

temp_label = ttk.Label(mainframe);
temp_label.grid(column=2, row=2, sticky=(W, E));
temp_label.configure(text = ACTEMP)


ttk.Label(mainframe, text="°C ").grid(column=3, row=2, sticky=W)


AutoContol = Button(mainframe, text="Auto Control").grid(column=4, row=2, sticky=(W, E))


ttk.Label(mainframe, text="Set Temperature").grid(column=1, row=3, sticky=(W, E))


SetTemp = StringVar()
SetTemp_entry = ttk.Entry(mainframe, width=17,textvariable=SetTemp)
SetTemp_entry.grid(column=2, row=3, sticky=(W, E))


ttk.Label(mainframe, text="°C ").grid(column=3, row=3, sticky=W)


ManFullSpeed = Button(mainframe, text="Manual Full Speed").grid(column=4, row=3, sticky=(W, E))
Entr = Button(mainframe, text="Enter").grid(column=2, row=4, sticky=(W, E))


ttk.Label(mainframe, text='Fan Speed').grid(column=1, row=6, sticky=(W, E))


FanSpeed = ttk.Label(mainframe, width=17,text = FanSpeedAnalogue)
FanSpeed.grid(column=2, row=6, sticky=(W, E))


ttk.Label(mainframe, text="%").grid(column=3, row=6, sticky=W)


for child in mainframe.winfo_children(): child.grid_configure(padx=15, pady=15)


root.update_idletasks

您可能无法 运行 此代码,因为我的 Raspberry Pi 上连接了一个模数转换器,这是我从

获取温度读数的地方

谢谢

尝试在调用 root.mainloop() 之前将其放入您的代码中:

def get_temperature():
    """returns the current temperature"""

    voltage = 3.3 * adc.value
    ActualTemp = voltage * 100
    ACTEMP ='{:.2f}'.format(ActualTemp)
    return ACTEMP


def update_temperature():
    """updates the text"""

    temp_label.configure(text = get_temperature())
    root.after(100, update_temperature)

root.after(100, update_temperature)

在你的主循环之前:

root.after(100, update_temperature)

after方法将每100毫秒调用一次你的函数,你可以根据需要更改这个值。