от tkinter.Tk.
Есть класс Window, который наследуется от tkinter.TopLevel.
Есть класс IPEntry, который наследуется от tkinter.Entry.
При попытке настроить валидацию введённого IP выдаёт ошибку AttributeError: "IPEntry" object has no attribute "tk".
Почему так? Все init вызывают init родительского класса, и так как они все наследуются от классов tkinter, то должны вести себя точно так же. Если я добавляю в Window обычный tkinter.Entry, он работает и валидация работает. Но если я пытаюсь унаследоваться от Entry, то он не может создать виджет.
Хотя я что tkinter.Entry, что своему IPEntry, который от него наследуется, передаю в качестве родительского виджета свой Window. Но судя по всему, tkinter.Entry принимает его как допустимого родителя, и получает свой атрибут tk, а мой IPEntry этого не делает, хотя он вызывает init родительского класса. Ничего не понимаю.
А, разобрался. Нужно вызывать register не самого виджета, а родителя.
Или нет... А, всё, понял теперь. Нельзя сразу регистрировать функцию, нужно сначала закончить инициализацию, и затем добавить валидацию через self.configure.
Обсуждают сегодня