簡體   English   中英

Tkinter:經過一定時間后如何更新標簽文本?

[英]Tkinter: How to update a label text after a certain amount of time has passed?

因此,我試圖創建一個基本的Tkinter程序,當我按下一個按鈕時,該程序將更新標簽字段上的文本,等待X秒鍾,然后再次更新標簽。

例如:

我單擊按鈕,按下按鈕后標簽立即清除,然后程序等待3秒鍾並在屏幕上顯示“ Hello”。

下面顯示的代碼無法實現我想要的功能,因為當我按下按鈕時,它將保持按下狀態X倍的時間,然后立即進行文本更新。 我要按下按鈕,清除標簽,等待3秒鍾,然后在屏幕上顯示“ Hello”。

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()

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')函數,並將其結果用作after() callback


編輯:正如@ acw1668在評論中所說,您也可以通過這種方式運行帶有參數的函數

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM