В данный момент я погружаюсь в tkinter, и многие примеры кода в Интернете охватывают только очень простые примеры и не учат передовым методам.
Для лучшей ремонтопригодности и ясности я хотел бы использовать ООП для графического интерфейса, что с моей точки зрения имеет смысл. Тем не менее, я бы прислушался к вашему совету о том, как его структурировать, потому что я в целом новичок. Я уже просмотрел другие вопросы, но они не смогли ответить на мой конкретный общий вопрос, который у меня есть.
Моя идея здесь:
Хотел бы создать строку меню для графического интерфейса и создать новый файл menu.py, который имеет дело только с этим меню. Здесь вы можете найти два примера:
<сильный>1. Пример: Логически строка меню состоит из других меню. Таким образом, меню содержит меню. Но я не уверен, хорошо ли использовать вложенные классы?
import tkinter as tk
class Menu(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.parent = parent
self.menubar = Menubar(self)
class Menubar(tk.Menu):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.parent = parent
self.add_cascade(label="File", menu=self.file_menu)
self.add_cascade(label="Edit", menu=self.edit_menu)
self.file_menu = FileMenu(self)
self.edit_menu = EditMenu(self)
class FileMenu(tk.Menu):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.parent = parent
class EditMenu(tk.Menu):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.parent = parent
<сильный>2. Пример: Здесь вы можете найти более процедурный пример. Но слабость здесь, с моей точки зрения, заключается в том, что иерархически Menubar, а также file_menu и edit_menu находятся на одном уровне. Но логически Menubar состоит из file_menu и edit_menu. Таким образом, это не совсем модульный. С другой стороны, возможно (?) его легче читать, чем первый пример.
import tkinter as tk
class Menu(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.parent = parent
self.menubar = tk.Menu(self)
self.create_file_menu(self.menubar)
self.create_edit_menu(self.menubar)
def create_file_menu(self, parent):
self.file_menu = tk.Menu(parent)
self.menubar.add_cascade(label="File", menu=self.file_menu)
def create_edit_menu(self, parent):
self.edit_menu = tk.Menu(parent)
self.menubar.add_cascade(label="Edit", menu=self.edit_menu)