在 Else 中删除标签
Remove Label in Else
非常新 Python 3 并在 tkinter 中编写我的第一个应用程序。
我有一个如果在凭证(数字)超出范围、最大值和最小值时创建标签,但是如果我首先 运行 超出范围然后更改我的号码,我想删除标签在我的其他代码的开头。
我试过 Label.delete
、Label.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)
非常新 Python 3 并在 tkinter 中编写我的第一个应用程序。
我有一个如果在凭证(数字)超出范围、最大值和最小值时创建标签,但是如果我首先 运行 超出范围然后更改我的号码,我想删除标签在我的其他代码的开头。
我试过 Label.delete
、Label.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)