этот код tkinter не имеет виджета, а всего лишь ярлык, поэтому он отображает только текст на экране, поэтому я хочу уничтожить или удалить метку после certian time !, Как я могу это сделать, когда метод 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()
В коде, который вы указали, я считаю, что исправление, которое вы ищете, это изменить это:
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()
label.master.destroy
? Избавление от самого ярлыка все равно оставило бы анонимное окно, содержащее его. (И полагаясь на это анонимное окно, вместо того, чтобы явно вызыватьTk()
чтобы вы имели прямую ссылку на него, поразите меня как-то странно - почему вы так поступаете?)