【发布时间】:2021-03-31 11:58:06
【问题描述】:
我通过循环创建条目和标签。如果用户单击该按钮,则会在两两分隔的行中出现新条目和标签。现在我想通过单击其他按钮来删除它们,但标签不可删除 - 只有条目是。
我的另一个问题是我只想删除通过单击添加的最后一个小部件。说清楚:我想一键删除最后18-18个标签和条目。目前,到目前为止所有添加的条目都将被删除。标签根本没有。 以下是相关代码:
self._1thLabel_list = ['Label1', 'Label2', 'Label3', 'Label4', 'Label5',
'Label6', 'Label7', 'Label8', 'Label9']
self._2thLabel_list = ['Label10', 'Label11', 'Label12', 'Label13', 'Label14',
'Label15', 'Label16', 'Label17', 'Label18']
nothingList2 = []
self.col = 4
for j in range(len(self._1thLabel_list)):
self.myLab = Label(root, text=self._1thLabel_list[j]).grid(row=0, column=j+1)
for k in range(1):
self.myEntry_loop = Entry(root)
self.myEntry_loop.grid(row=k + 1, column=j+1, pady=10, padx=10)
self.myEntry_loop_2 = Entry(root)
self.myEntry_loop_2.grid(row=k + 3, column=j + 1, pady=10, padx=10)
nothingList2.append(self.myEntry_loop)
nothingList2.append(self.myEntry_loop_2)
for l in range(len(self._2thLabel_list)):
self.myLab_2 = Label(root, text=self.mylist_2[l]).grid(row=2, column=l + 1)
self.myButton_newWidgets = Button(root, text="Add", command=self.Add)
self.myButton_newWidgets.grid(row=self.col, column=4)
self.myButton_deleteWidgets = Button(root, text="Delete", command=self.deleteThem)
self.myButton_deleteWidgets.grid(row=self.col, column=5)
以下是尝试删除它们的方法:
def deleteThem(self):
for v in range(18):
nothingList2.pop(0)
for dele in nothingList2:
dele.destroy() # Here, it is deleting entries but delete all of them. I want just delete the last 18 of them.
for w in range(9):
self._1thLabel_list.pop(0)
for delet in self._1thLabel_list:
delet.destroy() # I got "AttributeError: 'str' object has no attribute 'destroy'" error in this line
for x in range(9):
self._2thLabel_list.pop(0)
for delet2 in self._2thLabel_list:
delet2.destroy()
【问题讨论】:
-
这就是我试图删除它们的方式。但如果有人有更好的想法,那么我也愿意接受。
-
尝试只使用
pop(),然后将其存储为一个变量,然后将其删除,而不是使用for循环? -
nothingList2是第一个代码块内的局部变量(假设它在函数内),因此无法在deleteThem()函数内访问。同样,deleteThem()中的第一个 for 循环将清除nothingList2(假设它可以在此处访问),因此第二个 for 循环将什么也不做。最好提供minimal reproducible example。
标签: python tkinter tkinter-entry tkinter-label