无法更新Tkinter中的值

时间:2017-02-20 23:31:41

标签: tkinter refresh

我已经在我的最后一年项目工作了一段时间,但现在已经变得有点卡住了

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

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

以下是我挣扎的代码的一部分:

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的模拟数字转换器,这是我从我的温度读数

由于

1 个答案:

答案 0 :(得分:0)

在调用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毫秒调用一次您的函数,您可以根据需要更改此值。