Python, удаление элементов из списка кнопок - PullRequest
0 голосов
/ 12 декабря 2018

Итак, у меня есть этот код, который читает электронную таблицу в информационном кадре, а затем у меня есть две функции, которые запускаются при нажатии кнопок.Первый создает список новых кнопок для каждого столбца в кадре данных.Вторая предназначена для очистки списка кнопок и удаления кнопок с экрана.

У меня две проблемы.Во-первых, сборка кнопок в первой функции работает нормально, но список странный.В моих выборочных данных есть четыре столбца.Кнопки начинаются как «... button», а затем переходят в «... button2», «... button3», «... button4».Я понятия не имею, почему не идут ни 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>]

Thisвывод и ошибка из второй функции:

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

Я даже попытался выполнить итерацию в обратном направлении, начиная с последней записи, на случай, если я удаляю записи по ходу, и все еще получаю ошибку отсутствия индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...