我试图创建一个传感器面板,每隔一两秒钟更新一次,从开放硬件监视器中提取信息。我创建了一个函数,它输出与所需信息相关的值列表,但是我无法让它更新GUI。这是一个仅显示CPU包温度的简化版本。它将在运行时显示初始值,但不会更新。我计划用这段代码创建一个可执行文件,可以在第三屏幕上运行,从而在我的计算机上提供恒定的统计数据
import tkinter as tk
import wmi as w
root = tk.Tk()
i=0
def initialize():
def update():
w1 = w.WMI(namespace="root\OpenHardwareMonitor")
temperature_infos = w1.Sensor()
names = ['CPU Package' , 'GPU Core', 'CPU Total']
values = [0.0 , 0.0, 0.0, 0.0, 0.0,0.0,0.0,0.0,0.0]
for sensor in temperature_infos:
if sensor.SensorType == u'Temperature':
if sensor.Name == names[0]:
values[0] = sensor.Value
elif sensor.Name == names[1]:
values[1] = sensor.Value
else:
pass
elif sensor.SensorType == u'Load':
if sensor.Name == names[2]:
values[2] = sensor.Value
elif sensor.Name == names[1]:
values[3] = sensor.Value
elif sensor.Name == u'GPU Memory':
values[4] = sensor.Value
elif sensor.Name == u'Memory':
values[5] = sensor.Value
else:
pass
elif sensor.SensorType == u'Clock':
if sensor.Name == u'CPU Core #8':
values[6] = sensor.Value
else:
pass
elif sensor.SensorType == u'Fan':
if sensor.Name == u'Fan #5':
values[7] = sensor.Value
elif sensor.Name == u'GPU Fan':
values[8] = sensor.Value
else:
pass
return values
values = update()
text = tk.StringVar()
text.set(values[0])
label1 = tk.Label(root, textvariable = text)
global i
if i == 0:
label1.pack()
i+=1
else:
label1.config(textvariable = text)
root.after(1000,initialize)
root.after(1000,initialize)
root.mainloop()
我不使用Windows,所以我不能使用模块
wmi
,但对我来说,它应该是:我只在开始时创建一次空的
Label
,并使用after(1000, update)
运行函数,该函数从get_values()
获取值,它使用label.config(text=...)
更新标签上的文本。它不创建新的Label
,它不必检查它是否需要pack
或config
。它不需要StringVar
(但坦率地说,我可以使用它,然后我就不需要label.config
)模拟
values
中的更改并且每个人都可以运行它的版本编辑:
与
StringVar()
相同,而不是label.config(text=...)
相关问题 更多 >
编程相关推荐