无法更新Tkinter中的值

无法更新Tkinter中的值,tkinter,refresh,Tkinter,Refresh,我一直在为我的最后一年项目工作了一段时间,但在过去的一周里,我有点被卡住了 我正在设计一个温度控制器,到目前为止,温度显示在主屏幕上,其他一些元素也显示在主屏幕上 但我的问题是温度只保持在程序第一次运行时的值(它不会改变值) 下面是我正在努力解决的代码的一部分: from gpiozero import MCP3008 adc = MCP3008(channel =0, device =0) voltage = 3.3 * adc.value ActualTemp = voltage *

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

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

但我的问题是温度只保持在程序第一次运行时的值(它不会改变值)

下面是我正在努力解决的代码的一部分:

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()之前尝试将其放入代码中。

在主循环之前:

root.after(100,更新温度)


after
方法将每隔100毫秒调用您的函数,您可以根据需要更改此值。

请发布最小但可运行的代码。在您的代码中,未定义大型机,如果我们不知道您的代码是如何构造的,即大型机是如何定义的,则很难为您提供帮助。为了更改标签中的文本,您需要保留对它的引用,因此您可能需要放置类似以下内容:
temp\u label=ttk.label(大型机);临时标签网格(列=2,行=2,粘性=(W,E))然后每次计算体温后,调用类似于
temp\u label.configure(text=ACTEMP)
的命令,大家好,我已经编辑了我的帖子,现在包含了完整的代码,正如你们在代码中看到的,我已经尝试了你建议的代码,但仍然没有成功。我看到过关于使用get()函数的帖子,这行吗?
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)