首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter:显示带有自动更新变量的标签

Tkinter:显示带有自动更新变量的标签
EN

Stack Overflow用户
提问于 2019-04-18 09:27:26
回答 2查看 77关注 0票数 0

我知道关于这个问题有很多问题,但是经过长时间的研究,我没有找到任何能够解决我的问题的方法。

我试图用标签(使用tkinter)显示我从I总线获得的变量。因此,变量是非常定期和自动更新的。窗口的其余部分应可供用户使用。

目前,我发现用更新的变量显示标签并使窗口的其余部分可供用户使用的唯一方法是这样做:

代码语言:javascript
复制
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()方法可以解决我的问题,但我不知道如何运行它。我尝试了以下不起作用的代码:

代码语言:javascript
复制
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()

有人有正确的语法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-18 10:00:17

如何使用after()

after()在给定的ms延迟后调用函数回调。只需在给定的函数中定义它,它就会像till循环一样运行,直到调用after_cancel(id)

这里有一个例子:

代码语言:javascript
复制
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()之前调用它一次。

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2019-04-18 10:01:38

之后有以下语法:

(delay_ms,callback=None,*args)

您需要将命令放在回调函数中,并更新小部件所在的窗口(在您的示例中,labelValThermo看起来位于root窗口上:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55743033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档