簡體   English   中英

如何在python tkinter中使標簽出現然后在一定時間后消失

[英]How to make a Label appear then disappear after a certain amount of time in python tkinter

我想要一個買不起的標簽出現,然后在我按下按鈕購買東西時一秒消失。 似乎 time.sleep(1) 使它無法正常工作。 這是在 python tkinter 上完成的。

    def buttonpressed():
        Label.place(x = 500, y = 500 #where i want the label to appear
        time.sleep(1)
        Label.place(x = 10000, y = 10000) #moving it away where i wont be able to see it    

你不能使用sleep因為它會停止mainloop

您可以使用root.after(time_in_milliseconds, function_name)來運行函數

例子

import tkinter as tk


def button_pressed():
    # put text
    label['text'] = "Hello World!"
    # run clear_label after 2000ms (2s)
    root.after(2000, clear_label)

def clear_label():
    # remove text
    label['text'] = ""


root = tk.Tk()

label = tk.Label(root) # empty label for text
label.pack()

button = tk.Button(root, text="Press Button", command=button_pressed)
button.pack()

root.mainloop()

如果您必須創建和刪除標簽,請使用label.destroy()

import tkinter as tk


def button_pressed():
    label = tk.Label(root, text="Hello World!")
    label.pack()
    root.after(2000, destroy_widget, label) # label as argument for destroy_widget

def destroy_widget(widget):
    widget.destroy()


root = tk.Tk()

button = tk.Button(root, text="Press Button", command=button_pressed)
button.pack()

root.mainloop()

和沒有destroy_widget較短版本

import tkinter as tk


def button_pressed():
    label = tk.Label(root, text="Hello World!")
    label.pack()
    root.after(2000, label.destroy)


root = tk.Tk()

button = tk.Button(root, text="Press Button", command=button_pressed)
button.pack()

root.mainloop()

多次按下按鈕可看到許多標簽在 2 秒后消失。

您可以使用after()在指定的時間間隔后設置回調。 在回調函數中,使用pack_forget() (或grid_forget()如果您正在使用網格)清除標簽。 這比將標簽的文本屬性設置為空字符串要好,因為這會導致調整小部件的大小,這可能不是您想要的。 下面是一個例子:

import Tkinter as tk

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text='I am a label')
        self.label.place(x=0, y=0)
        self.label.after(1000, self.clear_label)    # 1000ms
        self.root.mainloop()

    def clear_label(self):
        print "clear_label"
        self.label.place_forget()

app=App()

另一種選擇是使用self.label.destroy()來銷毀小部件,但是, pack_forget()允許您通過再次調用小部件上的pack()來再次顯示標簽。

# I made it through calling 2 functions:


from tkinter import *

root = Tk()

root.geometry('400x200')  # width by height

def one_text():
    label['text'] = "Look around"
    root.after(1000, another_text)


def another_text():
    label['text'] = "and smile"
    root.after(1000, one_text)


label= Label(root ,font=('Helvetica', 14), fg='black', bg='white')
label.pack()

one_text()

root.mainloop()

暫無
暫無

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

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