我潛入tkinter此刻,互聯網上的許多代碼示例僅涵蓋非常簡單的示例,並不教授最佳實踐。結構tkinter程序 - 最佳實踐
爲了更好的可維護性和清晰度,我想將OOP用於GUI,這從我的角度來看是有意義的。 但是,我會就如何構建它提出建議,因爲我是一般初學者。 我已經瀏覽了其他問題,但他們無法回答我的具體一般問題。
我的想法在這裏:
想創建圖形用戶界面菜單欄,並創建一個新的文件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