Python,从按钮列表中删除项目

时间:2018-12-12 18:59:45

标签: python list button

因此,我有这段代码将电子表格中的数据读取到数据框中,然后有两个在按下按钮时运行的功能。第一个为数据框中的每一列创建一个新按钮列表。第二个目的是清除按钮列表,并从屏幕上删除按钮。

我有两个问题。首先,第一个功能中的按钮构建正常,但是列表很奇怪。在我的样本数据中,有四列。按钮从“ ...按钮”开始,然后到达“ ...按钮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

我什至尝试从最后一个条目开始向后进行迭代,以防我在擦除过程中擦掉条目时仍然遇到索引错误。

0 个答案:

没有答案