无法更新 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毫秒调用一次你的函数,你可以根据需要更改这个值。
我已经为我的最后一年项目工作了一段时间,但在过去的一周里有点卡住了
我正在设计一个温度控制器,到目前为止,温度显示在主屏幕上,还有一些其他元素
但我遇到的问题是温度仅保持在程序首次启动时的值 运行(它不会改变值)
下面是我正在努力处理的部分代码:
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毫秒调用一次你的函数,你可以根据需要更改这个值。