如何在tkinter中删除或销毁Label?

时间:2018-08-28 14:12:06

标签: python python-3.x tkinter

此tkinter代码没有小部件,只是一个标签,因此它只在屏幕上显示一个文本,因此我想在certian时间之后销毁或删除该标签!,当方法label.after( 1000,label.destroy)不起作用?

import tkinter, win32api, win32con, pywintypes

label = tkinter.Label(text='Text on the screen', font=('Times New Roman','80'), fg='black', bg='white')
label.master.overrideredirect(True)
label.master.geometry("+250+250")
label.master.lift()
label.master.wm_attributes("-topmost", True)
label.master.wm_attributes("-disabled", True)
label.master.wm_attributes("-transparentcolor", "white")

hWindow = pywintypes.HANDLE(int(label.master.frame(), 16))
# http://msdn.microsoft.com/en-us/library/windows/desktop/ff700543(v=vs.85).aspx
# The WS_EX_TRANSPARENT flag makes events (like mouse clicks) fall through the window.
exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)

label.pack()

label.after(1000 , lambda: label.destroy())   #doesn't work anyway..

label.mainloop()

2 个答案:

答案 0 :(得分:1)

在您提供的代码中,我相信您正在寻找的解决方案是对此进行更改:

label.after(1000 , lambda: label.destroy())

对此:

label.after(1000 , label.master.destroy)

您需要销毁label.master(我想这实际上是一个根窗口),因为如果不这样做,您最终会在屏幕上看到一个不透明的大盒子。

那表示我不确定为什么您要用这种方式编写应用程序。我想它可以工作,但我实际上并不知道您可以这样做,但我个人仍然会使用根窗口来编写它。

import tkinter as tk

root = tk.Tk()


label = tk.Label(root, text='Text on the screen', font=('Times New Roman','80'), fg='black', bg='white')
label.pack()

root.overrideredirect(True)
root.geometry("+250+250")
root.wm_attributes("-topmost", True)
root.wm_attributes("-disabled", True)
root.wm_attributes("-transparentcolor", "white")

root.after(1000 , root.destroy)

root.mainloop()

答案 1 :(得分:0)

import tkinter
import time

root =Tk()

label = Label(root, text="Text on the screen", font=('Times New Roman',  '80'), fg="black", bg="white")

time.sleep(1000)

label.destroy()

root.mainloop()