所以我在单击按钮时尝试删除标签,但是这样做会出错。
这是一个循环,它根据我之前声明的列表生成标签。
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()
答案 0 :(得分:0)
你的问题就在这一行:
self.pr1 = Label(...).place(x=0, y=t)
您在这一行中基本上做的是创建一个Label
对象,在该对象上就地调用.place
,然后将方法的结果分配给{{1 }}。自self.pr1
返回后,Label.place
,None
被分配到self.pr1
。
您需要在标签对象上调用None
方法, 将其分配给.place
。否则,您将失去对创建的self.pr1
对象的所有引用,并将其销毁。
Label
换句话说,self.pr1 = Label(...)
self.pr1.place(x=0, y=t)
无法就地工作。完成它的工作后,它不会返回对它被调用的对象的引用。