私は現時点でtkinterに潜入しています。インターネット上の多くのコード例は、非常に簡単な例だけをカバーしており、ベストプラクティスを教えていません。構造体tkinterプログラム - ベストプラクティス
メンテナンス性と明瞭さを向上させるために、OOPをGUIに使用したいと思います。これは私の視点からは意味があります。 しかし、私は一般的な初心者ですので、構造化の方法についてあなたのアドバイスをしています。 私はすでに他の質問を閲覧しましたが、私の特定の一般的な質問には答えられませんでした。ここ
私の考え:
は、GUIのメニューバーを作成し、それだけでメニューを扱うmenu.pyを新しいファイルを作成したいと思います。ここでは、2つの例を見つけることができます。
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)
は、あなたが宣言されていることを知っています内部のクラス別のクラス? – WhatsThePoint
はい、これは私のテキストに書いてあります。 – Aliquis
残念ながら、その部分は見えませんでしたが、必要なときにそれらを分けて呼び出すほうがよいでしょう – WhatsThePoint