Tkinter's Tk и другие классы имеют сотни методов и атрибутов. Я знаю, что если вы читаете древние GUI-программы для книг, со времен Windows 3.x, рекомендация по созданию собственной Windows должна заключаться в подклассе виджета базовой библиотеки и wrtite yoru-кода. Это то, что вы пытаетесь сделать выше, путем подклассификации Tk.
ну, не делаем это. Действительно, не надо. Таким образом, вы не можете создать какой-либо атрибут в своем классе без тройной проверки, если он не сталкивается с каким-либо другим атрибутом.
Используйте приспособление в OO, чтобы создать свою собственную иерархию классов - и это релевантная и упорядоченная вещь, которая облегчит вам жизнь. Чтобы наследовать из окна GUI-кода «Window» и присоединить к нему членов, например «name_text_entry» и «name_variable» (и повторить это для каждого элемента управления в вашей программе), это вещь, которую легко воспринимать как смешивание самых разных вещей (атрибуты управления окном и методы) с внутренней обработкой вашей собственной программы. Here is a more extensive consideration о том, почему этот шаблон не работает (не в Python, но я только что выбрал его из первых результатов Google)
Итак, просто создайте свою собственную программу и оставите классы Tkinter в одиночку - если вы не создаете новый пользовательский виджет (для использования в другой части кода).
Ваш код должен быть больше похож:
class Example(object):
def __init__(self, *args, **kw):
self.tk = tk.Tk(*args, **kw)
self.create_window()
def create_window(self):
self.canvas = tk.Canvas(self, width=800, height=600)
self.canvas.pack(side="top", fill="both", expand=True)
И просто работать. Сообщение об ошибке, как видно из комментариев, не является детерминированным и может быть получено множеством разных факторов - от tkinter.Tk внутренне в зависимости от того, не является ли оно подклассом (даже если это ошибка), к которому он имеет внутренний " холст "и т. д.
Просто используйте композицию и будьте счастливы.
Что значит остановиться? – Natecat
как вы запускаете этот код? непосредственно в терминале/консоли/cmd.exe или в IDE/IDLE? – furas
Когда я нажимаю X или останавливаю его из cmd.exe. – user1234259