首页 > 解决方案 > after() 方法暂时冻结 tkinter GUI

问题描述

我正在尝试使用 after 方法在十秒后更改 tkinter 标签中的文本。但是当我运行程序时,十秒钟内什么也没有发生,GUI 出现并且标签有第二个文本,而不是第一个。我想要的是 GUI 出现,并且标签具有第一个文本,十秒钟后标签中的文本应该更改为第二个文本。

import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.title("sistema de registro de peso aromaticas")
        self.container = tk.Frame(self)
        self.container.pack(side="top", fill="both", expand=True)
        self.container.grid_rowconfigure(0, weight=1)
        self.container.grid_columnconfigure(0, weight=1)
        self.etiqueta=tk.Label(text="1")
        self.etiqueta.pack()
        def cambio():
            self.after(10000, None)
            self.etiqueta.configure(text="2")
        cambio()

app = SampleApp()
app.mainloop()

我知道我可以在不使用类继承的情况下使其工作,但我正在制作一个带有各种窗口的界面,并且我为每个窗口使用不同的类。所以我需要这个在课堂上工作。

标签: pythontkinter

解决方案


self.after(10000, None)与 相同self.after(10000),实际上与 相同time.sleep(10)。它会冻结 UI,直到计时器周期结束。

如果你想打电话,self.etiqueta.configure(text="2")那么你可以这样做:

def cambio():
    self.etiqueta.configure(text="2")
self.after(10000, cambio)

这将导致cambio函数在 10 秒后运行。


推荐阅读