как удалить или уничтожить ярлык в ткинтер?

1

этот код 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()
  • 1
    «у этого кода tkinter нет виджета, только метка» - метки являются виджетами.
  • 1
    Вы пробовали label.master.destroy ? Избавление от самого ярлыка все равно оставило бы анонимное окно, содержащее его. (И полагаясь на это анонимное окно, вместо того, чтобы явно вызывать Tk() чтобы вы имели прямую ссылку на него, поразите меня как-то странно - почему вы так поступаете?)
Показать ещё 2 комментария
Теги:
python-3.x
tkinter

1 ответ

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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню