在pythontkin中,如何使标签在一段时间后出现然后消失

2024-10-03 11:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为一个负担不起的标签出现,然后在一秒钟后消失,当我按下按钮购买东西。好像是时间。睡觉(1) 使它不能正常工作。这是在pythontkinter上完成的。在

    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    

Tags: thetodef时间placeit标签where
2条回答

您可以使用after()在指定的时间间隔后设置回调。在回调函数中,用^{}清除标签(如果使用的是网格,grid_forget()则为grid_forget())。这比将标签的text属性设置为空字符串要好,因为这会导致小部件的大小调整,这可能不是您想要的。下面是一个例子:

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()来再次显示标签。在

不能使用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()

^{pr2}$

以及没有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秒后消失

相关问题 更多 >