我知道关于这个问题有很多问题,但是经过长时间的研究,我没有找到任何能够解决我的问题的方法。
我试图用标签(使用tkinter)显示我从I总线获得的变量。因此,变量是非常定期和自动更新的。窗口的其余部分应可供用户使用。
目前,我发现用更新的变量显示标签并使窗口的其余部分可供用户使用的唯一方法是这样做:
window = tk.Tk()
window.title("Gestionnaire de périphériques")
window.minsize(1024,600)
labelValThermo = tk.Label(a_frame_in_the_main_window,text = "")
labelValThermo.grid(row = 1, column = 1)
while True:
if mcp.get_hot_junction_temperature() != 16.0625:
labelValThermo.configure(text = "Température thermocouple: {} °C".format(mcp.get_hot_junction_temperature()))
window.update()
time.sleep(0.75)来自i 2 C并得到更新的变量是mcp.get_hot_junction_temperature。
事实上,我知道这不是在无限循环中强制更新的最佳方法。这应该是mainloop()的角色。我发现after()方法可以解决我的问题,但我不知道如何运行它。我尝试了以下不起作用的代码:
def displayThermoTemp():
if mcp.get_hot_junction_temperature() != 16.0625:
labelValThermo.configure(text = "Température thermocouple: {} °C".format(mcp.get_hot_junction_temperature()))
labelValThermo.after(500,displayThermoTemp)
window = tk.Tk()
labelValThermo = tk.Label(thermoGraphFrame,text = "")
labelValThermo.after(500, displayThermoTemp)
labelValThermo.grid(row = 1, column = 1)
window.mainloop()有人有正确的语法吗?
发布于 2019-04-18 10:00:17
如何使用after()
after()在给定的ms延迟后调用函数回调。只需在给定的函数中定义它,它就会像till循环一样运行,直到调用after_cancel(id)。
这里有一个例子:
import tkinter as tk
Count = 1
root = tk.Tk()
label = tk.Label(root, text=Count, font = ('', 30))
label.pack()
def update():
global Count
Count += 1
label['text'] = Count
root.after(100, update)
update()
root.mainloop()用这个更新您的函数并在mainloop()之前调用它一次。
def displayThermoTemp():
if mcp.get_hot_junction_temperature() != 16.0625:
labelValThermo.configure(text = "Température thermocouple: {} °C".format(mcp.get_hot_junction_temperature()))
labelValThermo.after(500,displayThermoTemp)
# 100ms = 0.1 secs
window(100, displayThermoTemp)发布于 2019-04-18 10:01:38
在之后有以下语法:
(delay_ms,callback=None,*args)
您需要将命令放在回调函数中,并更新小部件所在的窗口(在您的示例中,labelValThermo看起来位于root窗口上:
def displayThermoTemp():
if mcp.get_hot_junction_temperature() != 16.0625:
labelValThermo.configure(text = "Température thermocouple: {} °C".format(mcp.get_hot_junction_temperature()))
root.after(500,displayThermoTemp)https://stackoverflow.com/questions/55743033
复制相似问题