在 Else 中删除标签

Remove Label in Else

非常新 Python 3 并在 tkinter 中编写我的第一个应用程序。

我有一个如果在凭证(数字)超出范围、最大值和最小值时创建标签,但是如果我首先 运行 超出范围然后更改我的号码,我想删除标签在我的其他代码的开头。

我试过 Label.deleteLabel.destroy 但只抛出错误。

if int(voucher.get()) > int(maxN):
    textbox.configure(state="normal")
    textbox.delete('1.0', END)
    textbox.update()
    Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range").place(x=200, y=175)
    textbox.configure(state="disabled")

elif int(voucher.get()) < int(minN):
    textbox.configure(state="normal")
    textbox.delete('1.0', END)
    textbox.update()
    Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range").place(x=200, y=175)
    textbox.configure(state="disabled")

else:
    # I want to destroy Label here
    textbox.configure(state="normal")
    Label(root, text="All well")

感谢任何帮助。

//弗雷德

它正在抛出错误,因为您还没有为这些标签分配任何对象。如果他们没有参考,python 将如何知道需要销毁哪个标签。

destroy()Label class 的一种方法,如果没有对 [=27= 创建对象,则不能仅通过 Label.destroy() 调用它]标签。

例如:

L = Label(root, text="Hello World")
L.pack()

# Now, we can destroy it by

L.destroy()

现在你的代码,因为我不知道你想删除哪个标签,所以将使用第一个你可以根据你的要求更改的标签。

if int(voucher.get()) > int(maxN):
    textbox.configure(state="normal")
    textbox.delete('1.0', END)
    textbox.update()
    L1 = Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range")
    L1.place(x=200, y=175)
    textbox.configure(state="disabled")

elif int(voucher.get()) < int(minN):
    textbox.configure(state="normal")
    textbox.delete('1.0', END)
    textbox.update()
    L2 = Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range")
    L2.place(x=200, y=175)
    textbox.configure(state="disabled")

else:
    L1.destroy()      # Label in if will destroy
    L2.destroy()      # Label in elif will destroy
    textbox.configure(state="normal")
    L3 = Label(root, text="All well")

您创建了标签,但没有为每个标签提供参考/标签名称。没有引用,您无法告诉程序要删除哪个标签。

而不是使用:

Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range").place(x=200, y=175)

您必须使用(例如标签 Label1:):

Label1 = Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range")
Label1.place(x=200, y=175)

这将创建一个带有 reference/label 名称的标签 'Label1' 注意:我将 .place() 放在下面一行,因为当你将 .place() 放在同一行时,如下所示:

Label1 = Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range").place(x=200, y=175)

引用/标签 Label1 设置为返回的内容:

Label(root, text="The voucher " + str(voucher.get()) + " number is outside of   valid range").place(x=200, y=175)

所以设置为none 因为.place() returns none.

要销毁标签(例如 Label1),您可以使用 Label1.destroy()。

您的改进代码:


if int(voucher.get()) > int(maxN):
    textbox.configure(state="normal")
    textbox.delete('1.0', END)
    textbox.update()
    Label1 = Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range")
    Label1.place(x=200, y=175)
    textbox.configure(state="disabled")

elif int(voucher.get()) < int(minN):
    textbox.configure(state="normal")
    textbox.delete('1.0', END)
    textbox.update()
    Label1 = Label(root, text="The voucher " + str(voucher.get()) + " number is outside of valid range")
    Label1.place(x=200, y=175)
    textbox.configure(state="disabled")

else:
    Label1.destroy()
    textbox.configure(state="normal")
    Label2 = Label(root, text="All well")
    Label2.place(x=200, y=175)

我建议您添加:

if Label1.winfo_exists():
    Label1.destroy()

到你的else语句,这样Label1.destroy()代码就只有标签1的运行存在。这样,如果从未创建标签 1,则程序不会尝试销毁它。

这将使您的 else 语句看起来像这样:

else:
    if Label1.winfo_exists():
        Label1.destroy()
    textbox.configure(state="normal")
    Label2 = Label(root, text="All well")
    Label2.place(x=200, y=175)