python - 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()
我知道我可以在不使用类继承的情况下使其工作,但我正在制作一个带有各种窗口的界面,并且我为每个窗口使用不同的类。所以我需要这个在课堂上工作。
解决方案
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 秒后运行。
推荐阅读
- python - 从 py 文档中读取的 itertools.count 函数
- python - 多处理时函数与嵌套函数无休止地运行
- java - 在命令行 Spring Boot 中传递多个参数
- jenkins - Jenkins 管道运行阶段失败
- reactjs - 如何使用 Next.js^9.3 将 cookie 信息从 SignupPage 填充到导航栏组件?
- python - Pandas groupby 使用基于两列的聚合
- swift - 为什么要扩展类而不是遵循协议?
- mysql - Laravel MySQL 连接表
- php - 如何从多维数组中删除多列?
- html - 仅当文件在 Django 模板 (html) 中的服务器上可用时才显示下载按钮