_tkinter.TclError: неверное имя командыPython

Программы на Python
Гость
_tkinter.TclError: неверное имя команды

Сообщение Гость »


При перетаскивании окна на другой экран я получаю следующую ошибку:

Исключение в обратном вызове Tkinter _tkinter.TclError: неверное имя команды ".!sortingframe.!dynamicgrid.!imagebuttonwidget" Я пытаюсь использовать решение @bryan-oakley из динамического макета Tkinter Grid, чтобы отображать кнопки в макете динамической сетки. При нажатии одной кнопки в кадре мне нужно удалить все кнопки внутри сетки и очистить tk.Text. Я попробовал добавить функцию очистки содержимого:

defclear_all(self): self.text.configure(state='normal') теги = self.text.tag_names() для тега в тегах: self.text.tag_delete(тег) self.text.delete('1.0', tk.END) self.text.configure(state='disabled') Я читал, что это исключение возникает при попытке доступа к уже уничтоженному виджету.

Насколько я понимаю, сообщение об ошибке предполагает, что ошибка вызвана попыткой доступа к ImageButtonWidget. Я получаю сообщение об ошибке при перетаскивании окна на другой экран и после очистки tk.Text, поэтому я предполагаю, что ошибка возникает из-за того, как я удаляю кнопки.

Кроме виджета tk.Text у меня нет других ссылок на кнопки.

Я понятия не имею, что делаю не так.

Спасибо за помощь.

Изменить:

импортировать tkinter как tk импортировать customtkinter как ctk класс DynamicGrid(ctk.CTkFrame): def __init__(self, родитель, *args, **kwargs): super().__init__(родительский, *args, **kwargs) bg = 'серый80' self.text = tk.Text(self, Wrap="char", borderwidth=0, фон = bg, selectbackground = bg, selectforeground = bg, экспортселектион=0, вставкаоффтайм=0, рельеф="плоский", состояние = «отключено», интервал 2 = 8) self.text.grid(строка=0, столбец=0, липкий='nswe') Защиту добавления (я, объект): self.text.configure(state="нормальный") self.text.window_create("конец", окно=объект) self.text.insert("конец", ' ') self.text.configure(state="отключено") защита Clear_all (сам): self.text.configure(state='normal') теги = self.text.tag_names() для тега в тегах: self.text.tag_delete(тег) self.text.delete('1.0', tk.END) self.text.configure(state='disabled') класс ImageButtonWidget(ctk.CTkButton): def __init__(я, родительский элемент, имя файла): супер().__init__(родительский) self.configure(текст=имя файла) класс SortingFrame(ctk.CTkFrame): def __init__(я, родитель): супер().__init__(родительский) self.images_frame = DynamicGrid(self) self.create_images() self.create_images() self.images_frame.grid(row=1, columns=0, Sticky='nswe', columnspan=2) защита create_images(self): # Создаём и отображаем экземпляры ImageButtonWidget для каждого файла изображения self.images_frame.clear_all() для имени файла в диапазоне (2): image_widget = ImageButtonWidget(self.images_frame, str(filename)+'.png') self.images_frame.append(image_widget) приложение класса (ctk.CTk): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.title("Пример") SortingFrame(self).grid(строка=0, столбец=0, липкий='nsew') если __name__ == "__main__": приложение = Приложение() приложение.mainloop() Полная обратная трассировка:
Исключение в обратном вызове Tkinter Traceback (последний вызов последний): Файл "...AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", строка 1921, в __call__ вернуть self.func(*args) Файл "...AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", строка 839, в callit функция(*аргументы) Файл "...\explorerEnv\lib\site-packages\customtkinter\windows\widgets\scaling\scaling_tracker.py", строка 187, в check_dpi_scaling cls.update_scaling_callbacks_for_window(окно) Файл "...\explorerEnv\lib\site-packages\customtkinter\windows\widgets\scaling\scaling_tracker.py", строка 64, в update_scaling_callbacks_for_window set_scaling_callback(cls.window_dpi_scaling_dict[окно] * cls.widget_scaling, Файл "...\explorerEnv\lib\site-packages\customtkinter\windows\widgets\ctk_button.py", строка 136, в _set_scaling super()._set_scaling(*args, **kwargs) Файл "...\explorerEnv\lib\site-packages\customtkinter\windows\widgets\core_widget_classes\ctk_base_class.py", строка 228, в _set_scaling super().configure(width=self._apply_widget_scaling(self._desired_width), Файл "...AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", строка 1675, в настройке return self._configure('configure', cnf, kw) Файл "...AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", строка 1665, в _configure self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) _tkinter.TclError: неверное имя команды ".!sortingframe.!dynamicgrid.!imagebuttonwidget"

Вернуться в «Python»