Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » ООП в Python. Организация класса с родительским окном и класса с дочерним окном [RSS Feed]

#1 Март 22, 2017 19:23:01

Feelgood
Зарегистрирован: 2016-08-04
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ООП в Python. Организация класса с родительским окном и класса с дочерним окном

Собственно есть такой код накиданый мной. Изначально передо мной была задача: Создать приложение с использованием tkinter и ООП подхода к построению GUI, чтоб было главное окно и дочернее, которое вызывается по клику на кнопку. Я новичёк, но погуглив и почитав литературу моё решение вылилось в такой вот код. Есть основной класс Main который наследуется от Frame и является родительским окном, также есть класс Child который наследуется от Toplevel в свою очередь является дочернем окном.

Вопрос состоит в том, на сколько корректно я реализовал данную задачу с профессиональной точки зрения. Хочу мнения опытных Питонистов, данная задача всплывает у многих в той или иной реализации. Есть желания создать базовый шаблон чтоб дальше продолжить реализацию собственного приложения.

 import tkinter as tk
 
 
class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.init_main()
 
    def init_main(self):
        toolbar = tk.Frame(bg='#d7d8e0', bd=2)
        toolbar.pack(side=tk.TOP, fill=tk.X)
 
        btnOpenDialog = tk.Button(toolbar, text='Добавить позицию', command=self.open_dialog, bg='#d7d8e0', bd=0, compound=tk.TOP)
        btnOpenDialog.pack(side=tk.LEFT)
 
    def open_dialog(self):
       Child()
 
 
class Child(tk.Toplevel):
    def __init__(self):
        super().__init__(root)
        self.title('Добавить доходы/расходы')
        self.geometry('400x220+400+300')
        self.resizable(False, False)
 
if __name__ == "__main__":
    root = tk.Tk()
    app = Main(root)
    app.pack()
    root.title("Домашние финансы")
    root.geometry("650x450+300+200")
    root.resizable(False, False)
    root.mainloop()

Офлайн

#2 Март 22, 2017 23:03:25

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

ООП в Python. Организация класса с родительским окном и класса с дочерним окном

По-мне все норм, только PEP8 и если у Toplevel будет сложное поведение то хорошо бы и ему init приделать

Офлайн

#3 Март 25, 2017 17:41:13

Feelgood
Зарегистрирован: 2016-08-04
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ООП в Python. Организация класса с родительским окном и класса с дочерним окном

и если у Toplevel будет сложное поведение то хорошо бы и ему init приделать

what?

Офлайн

#4 Март 25, 2017 18:35:36

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

ООП в Python. Организация класса с родительским окном и класса с дочерним окном

Вы сделали init_main. Аналог, только для toplevel…

Офлайн

#5 Март 26, 2017 19:07:30

Feelgood
Зарегистрирован: 2016-08-04
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

ООП в Python. Организация класса с родительским окном и класса с дочерним окном

4kpt_V
Вы сделали init_main. Аналог, только для toplevel…

 import tkinter as tk
class Main(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.init_main()
    def init_main(self):
        toolbar = tk.Frame(bg='#d7d8e0', bd=2)
        toolbar.pack(side=tk.TOP, fill=tk.X)
        btnOpenDialog = tk.Button(toolbar, text='Добавить позицию', command=self.open_dialog, bg='#d7d8e0', bd=0, compound=tk.TOP)
        btnOpenDialog.pack(side=tk.LEFT)
    def open_dialog(self):
        Child()
class Child(tk.Toplevel):
    def __init__(self):
        super().__init__(root)
        self.init_child()
    def init_child(self):
        self.title('Добавить доходы/расходы')
        self.geometry('400x220+400+300')
        self.resizable(False, False)
if __name__ == "__main__":
    root = tk.Tk()
    app = Main(root)
    app.pack()
    root.title("Домашние финансы")
    root.geometry("650x450+300+200")
    root.resizable(False, False)
    root.mainloop()

Вы это имели введу?

Офлайн

  • Начало
  • » GUI
  • » ООП в Python. Организация класса с родительским окном и класса с дочерним окном[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version