删除其他标签

时间:2019-04-18 17:03:08

标签: tkinter label python-3.7

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

感谢您的帮助。

//弗雷德

2 个答案:

答案 0 :(得分:1)

由于未将任何对象分配给这些标签,因此引发错误。如果他们没有参考,python将如何知道需要销毁哪个Label。

destroy()Label类的一种方法,如果尚未将其作为Label类的对象,则不能仅通过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")

答案 1 :(得分:0)

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

代替使用:

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)

这将创建一个引用/标签名称为“ 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()不返回任何值。

要破坏标签(例如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语句,以便只运行标签1的Label1.destroy()代码存在。这样,如果从未创建标签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)