如何删除tkinter中循环生成的标签?

时间:2018-01-17 02:39:23

标签: python tkinter attributeerror

所以我在单击按钮时尝试删除标签,但是这样做会出错。

这是一个循环,它根据我之前声明的列表生成标签。

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

1 个答案:

答案 0 :(得分:0)

你的问题就在这一行:

self.pr1 = Label(...).place(x=0, y=t)

您在这一行中基本上做的是创建一个Label对象,在该对象上就地调用.place,然后将方法的结果分配给{{1 }}。自self.pr1返回后,Label.placeNone被分配到self.pr1

您需要在标签对象上调用None方法, 将其分配给.place。否则,您将失去对创建的self.pr1对象的所有引用,并将其销毁。

Label

换句话说,self.pr1 = Label(...) self.pr1.place(x=0, y=t) 无法就地工作。完成它的工作后,它不会返回对它被调用的对象的引用。