Найти - Пользователи
Полная версия: зачем наследовать от Frame ?
Начало » GUI » зачем наследовать от Frame ?
1
zlodiak
помогите пожалуйста разобраться в одном важном для меня вопросе

принято создавать интерфейсы через классы. это делается для того чтобы:
  • можно было при желании удобным образом вставить готовый интерфейс в определённое место программы.
  • можно было клонировать функциональность, не дублируя код
  • код интерфейса находился в определённом контексте(то есть отсутствовали бы конфликты переменных)

НО что я никак не могу понять, так это зачем класс нужно наследовать от 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()
4kpt_II
А зачем нужны рамки?
Если правильно ответите на этот вопрос, то ответите и на свой
zlodiak
ну например для группировки. но здесь объект в любом случае группирует свое содержимое в отдельную область видимости и в “модуль”. однако лутц в большинстве примеров зачем то всё таки наследование использует. это мне не понятно
4kpt_II
Вы можете одной строкой отключить отображение объекта. А указать ему размещение среди других объектов используя стандартный менеджер геометрии?
zlodiak
4kpt_II
Вы можете одной строкой отключить отображение объекта. А указать ему размещение среди других объектов используя стандартный менеджер геометрии?

вот код, который делает то, о чём вы сказали выше. причём без наследования
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()

поэтому я так и не разобрался зачем нужно наследовать от Frame или подобных классов виджетов

4kpt_II
Забейте. Вы не поняли о чем я.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB