Я успешно создавал и использовал пользовательские классы tkinter, используя этот формат инициализации:
class MyWidgetFrame(tk.Frame):
def __init__(self,master):
super().__init__()
Но я наткнулся на туториал, в котором предлагалось, что также необходимо передать мастер (т.е. рут или другой контейнер) родителю:
class MyWidgetFrame(tk.Frame):
def __init__(self,master):
super().__init__(master)
Мои пользовательские классы работали нормально без такой передачи мастера. Но, возможно, я чего-то не понимаю. Это рекомендуемая практика?
Вы можете думать, что это работает нормально, но это не так, как вы думаете. Если у вас есть класс, который наследуется от виджета, вы должны каждый раз передавать мастер.
Если вы не передадите мастер, каждый виджет будет дочерним элементом корневого окна. Для очень простого приложения это может не иметь большого значения, но даже для приложений средней сложности это будет иметь значение.
@fmex: ты не должен проходить self
.
Спасибо. Как всегда, ваши ответы ясны и по делу. В других связанных вопросах, показанных на этой странице, я видел super().__init__(self,master), так что передается не только «master», но и «self». Могу ли я просто передать «мастер» или «я» тоже должно быть там? Заранее спасибо.