从Gtk.Widget或直接从特定小部件派生更好吗?

时间:2016-07-29 05:08:11

标签: python gtk

当我为我的应用程序创建UI类时,我常常想知道从Gtk.Widget派生我的类是否更好,然后明确添加我需要的小部件或直接从特定小部件派生。

这是两个例子,哪一个是最好的?

class MyComponent(Gtk.Widget):
    def __init__(self):
        Gtk.Widget.__init__(self)

        box = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 6)
        button1 = Gtk.Button.new_with_label("Awesome Button1")
        button2 = Gtk.Button.new_with_label("Awesome Button2")
        button3 = Gtk.Button.new_with_label("Awesome Button3")
        box.pack_start(button1, True, True, 0)
        box.pack_start(button2, True, True, 0)
        box.pack_start(button3, True, True, 0)

        self.add(box)
class MyComponent(Gtk.Box):
    def __init__(self):
        Gtk.Box.__init__(self, Gtk.Orientation.HORIZONTAL, 6)

        button1 = Gtk.Button.new_with_label("Awesome Button1")
        button2 = Gtk.Button.new_with_label("Awesome Button2")
        button3 = Gtk.Button.new_with_label("Awesome Button3")
        self.pack_start(button1, True, True, 0)
        self.pack_start(button2, True, True, 0)
        self.pack_start(button3, True, True, 0)

在我看来,第一个版本更好,因为我的组件在技术上不是Gtk.Box,它是使用Gtk.Box的小部件,但它也可以使用Gtk.GridGtk.DrawingArea

所以在设计观点上似乎是正确的,但也许还有一些我不了解的技术问题。你的建议是什么?

2 个答案:

答案 0 :(得分:1)

这取决于你心中的抽象。问问自己:您的组件只是一个自定义的更多吗?

此外,你实际上需要继承吗?也许你可以放弃一个免费的工厂功能,根据自己的喜好创建一组Gtk.Widgets。

答案 1 :(得分:0)

我不明白为什么你认为第一个更好。只需将您真正想要的内容细分。 Gtk.Box 一个Gtk.Widget所以无论你在哪里使用后者都可以使用前者。