【问题标题】:OO GUI programming style: assign widgets to instance attributes?OO GUI 编程风格:将小部件分配给实例属性?
【发布时间】:2011-08-30 05:41:01
【问题描述】:

在我有限的 OO GUI 编程(主要是 JAVA 和 Tkinter)经验中,我注意到在某些代码中,所有小部件都分配给实例属性,而在其他代码中,即使有也很少。

例如,在 python 文档的 Tkinter 章节的 A Simple Hello World Program 中,两个按钮都分配给 Application 类的实例属性:

class Application(Frame):
    ...

    def createWidgets(self):
        self.QUIT = Button(self)
        ...
        self.hi_there = Button(self)
        ...

    def __init__(self, master=None):
        Frame.__init__(self, master)
        ...
        self.createWidgets()

另一方面,Tkinter 书籍的Dialog Windows 章节定义了一个对话框支持类,它的任何小部件都没有分配给实例属性:

class Dialog(Toplevel):
    def __init__(self, parent, title = None):
        Toplevel.__init__(self, parent)
        ...
        body = Frame(self)
        ...
        self.buttonbox()
        ...
    ...
    def buttonbox(self):
        ...
        box = Frame(self)

        w = Button(box, ...)
        ...
        w = Button(box, ...)
        ...
    ...

问题陈述

每种方法的优缺点是什么?在某些情况下使用一种方法而不是另一种方法更有意义?

【问题讨论】:

    标签: user-interface coding-style


    【解决方案1】:

    我的经验法则很简单:如果您以后需要引用它,请将其设为属性。如果没有,不要。

    我不确定我是否能列举出这种方法的优点或缺点——保存所有引用或只保存你需要的引用都不是特别好的或坏的,这主要是风格问题。

    话虽如此,但是,为小部件创建属性可能意味着它在其他地方使用。如果它没有在其他地方使用,人们可能会对你的代码做出不正确的推断。

    【讨论】:

      【解决方案2】:

      很多时候,在将小部件添加到窗口并将其与事件关联后,您将不需要引用它;在这些情况下,小部件最终不会成为属性。此外,如果容器是动态的,您不会将小部件设为属性(因为您不会事先知道该对象将拥有的小部件)。

      如果容器是静态的,并且您知道以后需要引用小部件,则可以将其设为对象属性;这将使类的其他部分中对小部件的引用清晰而紧凑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-21
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多