繁体   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