Я ныряю в tkinter в настоящий момент, и многие примеры кода в Интернете охватывают только очень простые примеры и не учат передовым практикам.Структура tkinter program - Лучшие практики
Для лучшей ремонтопригодности и ясности я бы хотел использовать ООП для графического интерфейса, что имеет смысл с моей точки зрения. Однако я бы посоветовал, как его структурировать, потому что я новичок в целом. Я уже просматривал другие вопросы, но они не могли ответить на мой конкретный общий вопрос, который у меня есть.
Моя идея здесь:
Хотела создать строку меню для графического интерфейса и создать новый файл 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)
вы в курсе, что вы объявляете класс внутри o f другой класс? – WhatsThePoint
Да, я написал это в своем тексте. – Aliquis
извините, не увидели эту часть, но было бы лучше отделить их и вызвать их, когда они вам понадобятся. – WhatsThePoint