Найти - Пользователи
Полная версия: ООП в Python. Организация класса с родительским окном и класса с дочерним окном
Начало » GUI » ООП в Python. Организация класса с родительским окном и класса с дочерним окном
1
Feelgood
Собственно есть такой код накиданый мной. Изначально передо мной была задача: Создать приложение с использованием 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()
4kpt_V
По-мне все норм, только PEP8 и если у Toplevel будет сложное поведение то хорошо бы и ему init приделать
Feelgood
и если у Toplevel будет сложное поведение то хорошо бы и ему init приделать

what?
4kpt_V
Вы сделали init_main. Аналог, только для toplevel…
Feelgood
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()

Вы это имели введу?
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