首页 > 解决方案 > Tkinter:经过一定时间后如何更新标签文本?

问题描述

所以,我正在尝试创建一个基本的 Tkinter 程序,当我按下按钮时,它会更新标签字段上的文本,等待 X 秒,然后再次更新标签。

例如:

我单击按钮,标签在按下后立即清除,然后程序等待 3 秒并在屏幕上显示“Hello”。

下面显示的代码没有做我想做的事情,因为当我按下按钮时,它会保持按下 X 时间,然后文本会立即更新。我想按下按钮,清除标签,等待 3 秒钟,然后在屏幕上显示“你好”。

from tkinter import *

 class Origin:

    def __init__(self):

        self.root = Tk()
        self.root.geometry('800x600')
        self.root.config(bg="black")

        self.v = StringVar()
        self.v.set('O  R  I  G  I  N')

        self.main_label = Label(self.root, textvariable=self.v, font="Arial 40", fg="white", bg="black")
        self.main_label.place(x=240, y=150)

        self.clear = Button(self.root, text='Clear', command=self.clear)
        self.clear.place(x=400, y=400)

        self.root.mainloop()

    def clear(self):
        #just to clear the string
        self.v.set('')

        self.root.after(3000, self.v.set('Hello'))


 def main():
    App = Origin()

 if __name__ == '__main__':
    main()

标签: pythoneventstkinter

解决方案


after需要callback- 这意味着没有()和参数的函数名称。如果必须使用带参数的函数,请使用 `lambda

after(3000, lambda:self.v.set('Hello'))

或创建不需要参数的函数

def callback():
    self.v.set('Hello')

self.root.after(3000, callback)

您当前的代码就像

result = self.v.set('Hello')
self.root.after(3000, result)

它立即执行函数self.v.set('Hello')并使用其结果,如callback.after()


编辑:正如@a​​cw1668 在评论中所说,您也可以通过这种方式运行带有参数的函数

self.root.after(3000, self.v.set, 'Hello')

推荐阅读