首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Structure tkinter程序-最佳实践

Structure tkinter程序-最佳实践
EN

Stack Overflow用户
提问于 2017-02-20 08:49:56
回答 1查看 2.1K关注 0票数 0

目前,我深入研究了tkinter,互联网上的许多代码示例只包含非常简单的示例,并不教授最佳实践。

为了获得更好的可维护性和清晰性,我希望在GUI中使用OOP,从我的角度来看,这是有意义的。然而,我会接受你关于如何构造它的建议,因为我一般都是初学者。我已经浏览过其他的问题,但他们不能回答我的一般性问题。

在这里我的想法:

希望为GUI创建一个菜单,并创建一个只处理该菜单的新文件menu.py。在这里您可以找到两个例子:

1.示例:从逻辑上讲,由其他菜单组成。所以菜单上有菜单。但我不确定使用嵌套类是否好?

代码语言:javascript
运行
复制
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组成。所以,这并不是真正的模块化。在另一边,也许是(?)比第一个例子更容易阅读。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2017-12-09 10:27:03

嵌套类不会降低或提高执行效率。它可能会改变维护和理解效率。Python的嵌套类不像Java的嵌套类,内部类可以引用外部类的实例。它们实际上是两个不同的类。

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

也见

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42339995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档