Как удалить ярлык из tkinter после обратного отсчета - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать десятисекундный обратный отсчет, который удаляется после того, как достигнет нуля. Как и где я могу разместить код для удаления метки?

Я экспериментировал с label.destroy() и label.forget(), но они не работают, создавая сообщение об ошибке.

from tkinter import *

root = Tk()

def countdown(count):
    label['text'] = count
    if count > 0:
        root.after(1000, countdown, count-1)
    elif count == 0:
        label['text'] = 'Time Expired'

label = Label(root, anchor=CENTER, font=('Calibri', 48))
label.place(x=132, y=102)
countdown(10)
label.pack_forget()

Я надеялся, что программа удалит ярлык после завершения своей задачи. Однако он ведет обратный отсчет, но не удаляет себя.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Позвоните destroy или pack_forget внутри функции countdown, а не после нее:

from tkinter import *

root = Tk()

def countdown(count):
    label['text'] = count
    if count > 0:
        root.after(1000, countdown, count-1)
    elif count == 0:
        label['text'] = 'Time \nExpired'
        label.pack_forget()  # or label.destroy()


label = Label(root, anchor=CENTER, font=('Calibri', 48))
label.place(x=132, y=102)
label.pack()
countdown(10)
root.mainloop()
1 голос
/ 08 апреля 2019

Если вы хотите увидеть «Время истекло» в течение 1 секунды, а затем скрыть метку, попробуйте этот код:

from tkinter import *

root = Tk()
def countdown(count, label):
    label['text'] = count
    if count > 0:
        root.after(1000, countdown, count-1, label)
    elif count == 0:
        label['text'] = 'Time \nExpired'
        root.after(1000, countdown, count-1, label)
    elif count < 0:
        label.destroy()

label = Label(root, anchor=CENTER, font=('Calibri', 48))
label.place(x=132, y=102)
countdown(10, label)
root.mainloop()

Основная проблема заключается в том, что вы не ждете, пока функция обратного отсчета завершит цикл выполнения, прежде чем скрыть метку; Одним из решений является то, что скрывающая инструкция должна быть перемещена в функцию обратного отсчета и выполнена в последнем цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...