因此,我有这段代码将电子表格中的数据读取到数据框中,然后有两个在按下按钮时运行的功能。第一个为数据框中的每一列创建一个新按钮列表。第二个目的是清除按钮列表,并从屏幕上删除按钮。
我有两个问题。首先,第一个功能中的按钮构建正常,但是列表很奇怪。在我的样本数据中,有四列。按钮从“ ...按钮”开始,然后到达“ ...按钮2”,“ ...按钮3”,“ ...按钮4”。我不知道为什么不走0、1、2、3或1、2、3、4。
然后,当我删除第二个功能中的按钮时,到达第三个按钮时会崩溃。不知道为什么。我既要从网格中删除按钮,又要使它们脱离按钮列表。我尝试清除整个列表,而不是在逐步浏览列表时删除每个按钮,但这没有用。我尝试了几种方法,如下所示:
self.column_buttons = []
del self.column_buttons[:]
self.column_buttons.clear()
这些都不会清空列表。如果我构建了按钮列表,请使用上面的任何方法尝试清除它,然后再次构建它,ist中的按钮为5-8,重新清除并重新构建,然后得到9-12,依此类推上。
这是我的代码。...
def fxThree(self):
print(self.column_buttons)
# make a new button in a new frame for each column in the file
for x in range(len(self.df1_columns)):
self.new_button = tk.Button(self.frame3, text=self.df1_columns[x], command=lambda x=x: delete_button(self, x))
self.new_button.grid(row=10, column=(x))
self.column_buttons.append(self.new_button)
print(self.column_buttons)
print("\n")
def fxFour(self):
for x in range(len(self.column_buttons)):
print(x)
print("Removing button: " + str(x))
self.column_buttons[x].grid_remove()
print("Deleting list entry :" + str(x))
del self.column_buttons[x]
del self.column_buttons[:]
print(self.column_buttons)
这是第一个函数的输出在控制台中的样子:
[<tkinter.Button object .!frame3.!button>, <tkinter.Button object .!frame3.!button2>, <tkinter.Button object .!frame3.!button3>, <tkinter.Button object .!frame3.!button4>]
这是第二个函数的输出和错误:
0
Removing button: 0
Deleting list entry :0
1
Removing button: 1
Deleting list entry :1
2
Removing button: 2
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:/Users/user/Documents/Data Management/Python/SheetMapper/sheet_mapper_01.3.py", line 312, in fxFour
self.column_buttons[x].grid_remove()
IndexError: list index out of range
我什至尝试从最后一个条目开始向后进行迭代,以防我在擦除过程中擦掉条目时仍然遇到索引错误。