结构TKINTER程序 - 最佳实践



我目前深入tkinter,Internet上的许多代码示例仅涵盖非常简单的示例,并且不教授最佳实践。

为了更好地可维护性和清晰度,我想将OOP用于GUI,这从我的角度来看是有意义的。但是,我会为您提供有关如何构建它的建议,因为我一般都是初学者。我已经浏览了其他问题,但是他们无法回答我的特定一般问题。

我的想法在这里:

想为GUI创建一个菜单,并创建一个新的文件菜单,它仅处理该菜单。在这里,您可以找到两个示例:

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。示例:在这里您可以找到一个更多的程序示例。但是,从我的角度来看,这里的弱点是层次结构梅纳巴尔以及file_menu和edit_menu处于同一级别。但是从逻辑上讲,梅巴尔由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)

嵌套类不会降低或提高执行效率。它可能会改变维护和理解效率。Python的嵌套类并不像Java的嵌套类可以参考外部类的嵌套类。它们实际上是两个单独的类。

因此,您的示例1比示例2更好。

另请参见

  • 在Python中定义函数中的本地类是一个坏主意?
  • 在python中做嵌套班是一个好习惯?
  • Python的内部类的目的是什么?

相关内容

  • 没有找到相关文章

最新更新