【问题标题】:How to delete a label from tkinter after a countdown倒计时后如何从 tkinter 中删除标签
【发布时间】:2019-04-08 14:32:29
【问题描述】:

我正在尝试创建一个 10 秒倒计时,该倒计时在达到零后会自行移除。如何以及在何处放置代码以删除标签?

我已经尝试过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()

我希望程序在完成任务后删除标签。但是,它会倒计时,但不会自行移除。

【问题讨论】:

  • labelname.destroy()

标签: python python-3.x tkinter label


【解决方案1】:

countdown 函数内调用destroypack_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 \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()

【讨论】:

    【解决方案2】:

    如果您想在 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()
    

    主要问题是您在隐藏标签之前没有等待倒计时功能完成执行周期;一种解决方案是隐藏要在倒计时函数中移动并在最后一个周期执行的指令。

    【讨论】:

    • countdown() 的定义代码需要两个参数,这意味着代码countdown(10) 将不起作用,因为它只有一个参数。因此,会显示一条错误消息,显示“TypeError: countdown() missing 1 required positional argument: 'label'”
    猜你喜欢
    • 2021-01-13
    • 2016-01-23
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多