如何删除从 tkinter 中的循环生成的标签?
How to delete label generated from loop in tkinter?
因此,我尝试在单击按钮时删除标签,但在执行此操作时出现错误。
这是一个循环,它根据我之前声明的列表生成标签。
t = 150
i = 0
for p in products_list:
self.pr1 = Label(self.right, text=str(products_list[i]), font=('arial 16 bold'), bg='steelblue', fg='white').place(x=0, y=t)
self.pr2 = Label(self.right, text=(str(quantity_list[i])), font=('arial 16 bold'), bg='steelblue', fg='white').place(x=130, y=t)
self.pr3 = Label(self.right, text=(str(price_list[i])), font=('arial 16 bold'), bg='steelblue', fg='white').place(x=240, y=t)
t += 40
i += 1
现在我尝试在单击按钮时删除这些标签。我创建了一个必须删除标签的 print_bill 函数。我试过了:
def print_bill(self):
f = open(str(date), "w+")
f.write("Bill Bill Bill")
f.close()
tkinter.messagebox.showinfo("Bill", "Bill Generated Successfully")
self.pr1.destroy()
你的问题是这一行:
self.pr1 = Label(...).place(x=0, y=t)
你在这一行中所做的基本上是创建一个 Label
对象,就地调用该对象的 .place
,然后将方法的结果分配给 self.pr1
.由于Label.place
returns,None
,self.pr1
赋值给None
.
您需要在标签对象上调用 .place
方法,在 将其分配给 self.pr1
之后。否则,您会丢失对创建的 Label
对象的所有引用,并且它会被销毁。
self.pr1 = Label(...)
self.pr1.place(x=0, y=t)
换句话说,Label.place
不能就地工作。完成工作后,它 returns 没有对调用它的对象的引用。
因此,我尝试在单击按钮时删除标签,但在执行此操作时出现错误。
这是一个循环,它根据我之前声明的列表生成标签。
t = 150
i = 0
for p in products_list:
self.pr1 = Label(self.right, text=str(products_list[i]), font=('arial 16 bold'), bg='steelblue', fg='white').place(x=0, y=t)
self.pr2 = Label(self.right, text=(str(quantity_list[i])), font=('arial 16 bold'), bg='steelblue', fg='white').place(x=130, y=t)
self.pr3 = Label(self.right, text=(str(price_list[i])), font=('arial 16 bold'), bg='steelblue', fg='white').place(x=240, y=t)
t += 40
i += 1
现在我尝试在单击按钮时删除这些标签。我创建了一个必须删除标签的 print_bill 函数。我试过了:
def print_bill(self):
f = open(str(date), "w+")
f.write("Bill Bill Bill")
f.close()
tkinter.messagebox.showinfo("Bill", "Bill Generated Successfully")
self.pr1.destroy()
你的问题是这一行:
self.pr1 = Label(...).place(x=0, y=t)
你在这一行中所做的基本上是创建一个 Label
对象,就地调用该对象的 .place
,然后将方法的结果分配给 self.pr1
.由于Label.place
returns,None
,self.pr1
赋值给None
.
您需要在标签对象上调用 .place
方法,在 将其分配给 self.pr1
之后。否则,您会丢失对创建的 Label
对象的所有引用,并且它会被销毁。
self.pr1 = Label(...)
self.pr1.place(x=0, y=t)
换句话说,Label.place
不能就地工作。完成工作后,它 returns 没有对调用它的对象的引用。