Зачем наследование в tkinter?

Скажите, пожалуйста, зачем при создании графических интерфейсов при помощи tkinter принято наследовать класс от Frame и т.п.?

Вот классический пример кода, который используется почти всегда:

import tkinter
import tkinter.messagebox

class Quitter(tkinter.Frame):        
                 
    def __init__(self, parent=None):          
        tkinter.Frame.__init__(self, parent)
        self.pack()
        widget = tkinter.Button(self, text='Quit', command=self.quit)
        widget.pack(side='left', expand='yes', fill=tkinter.BOTH)

    def quit(self):
        ans = tkinter.messagebox.askokcancel('Verify exit', "Really quit?")
        if ans: tkinter.Frame.quit(self)

if __name__ == '__main__':  Quitter().mainloop()


По моему можно обойтись и без наследования. Например так:

import tkinter
 
class But_print():
     def __init__(self, parent):
          self.but = tkinter.Button(parent, text = 'press me', command = lambda: self.press(parent))
          self.but.pack()
          
     def press(self, parent):
          parent.destroy()
 
root = tkinter.Tk()
root2 = tkinter.Tk()
obj = But_print(root)
obj2 = But_print(root2)
root.mainloop()


Скажите, пожалуйста, где я не прав и почему использовать наследование важно? Какие плюсы это даёт?
  • Вопрос задан
  • 3250 просмотров
Пригласить эксперта
Ответы на вопрос 2
OnYourLips
@OnYourLips
Инкапсуляция логики в логическую единицу.
У вас же все в глобальную область навалено.
Ответ написан
@vseplan
Графический интерфейс реализован как подкласс класса Frame и потому автоматически становится присоединяемым компонентом – то есть мы сможем добавить все виджеты, создаваемые этим классом, как единый пакет в любой другой графический интерфейс; достаточно просто присоединить экземпляр этого класса к графическому интерфейсу. По простому - если вам нужна только один виджет и вы его нигде больше применять не собираетесь, то можно обойтись без 'frame'. Но если вы создаете группу виджетов, то их удобнее поместить в один фрейм, поместить в отдельный модуль (где таких групп может быть много) и далее импортировать, присоединять к другим интерфейсам одним махом. Данную информацию я взял в книге Марка Лутца "Програмирование на Python" том 1. стр. 89-90.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы