Python Tkinter:删除标签不起作用
问题描述:
我有一个包含所有数据库记录的GUI。点击“搜索”按钮后,我希望从屏幕上清除所有记录,并显示与用户搜索相关的记录。我试图引用我的标签并调用“destroy”方法,如下所示:a.destroy()
但该程序不会将这些标签识别为小部件。Python Tkinter:删除标签不起作用
class DBViewer:
def __init__(self, rows):
# Display all records
row_for_records = 2
for record in rows:
a = tkinter.Label(self.main_window, text=record[0])
a.grid(row=row_for_records, column=0)
b = tkinter.Label(self.main_window, text=record[1])
b.grid(row=row_for_records, column=1)
# More labels here
self.display_rows(rows)
tkinter.mainloop()
def display_rows(self, rows):
# Where I'm having trouble
def main():
global db
try:
dbname = 'books.db'
if os.path.exists(dbname):
db = sqlite3.connect(dbname)
cursor = db.cursor()
sql = 'SELECT * FROM BOOKS'
cursor.execute(sql)
rows = cursor.fetchall()
DBViewer(rows)
db.close()
编辑:分离的小部件分配和网格,但仍然面临着同样的问题。任何人都想帮助编程新手?
答
为了删除某些内容,您必须有一个对它的引用。您不保存对正在创建的小部件的引用。尝试将它们保存到列表或字典中。
在创建他们:
...
self.labels = []
for record in rows:
a = Tkinter.Label(...)
self.labels.append(a)
...
当你要删除它们:
for label in self.labels:
label.destroy()
我不认为这直接回答你的问题,但你不能指定一个部件和其格同一条线。请参阅http://stackoverflow.com/questions/1101750/tkinter-attributeerror-nonetype-object-has-no-attribute-get – Kevin
感谢凯文,我已经相应地改变了它 –