2016-07-29 1 views
1

Wenn ich eine UI-Klasse für meine App erstelle, frage ich mich oft, ob es besser ist, meine Klasse von Gtk.Widget abzuleiten und dann die benötigten Widgets explizit hinzuzufügen oder direkt von einem bestimmten Widget abzuleiten.Ist es besser, von Gtk.Widget oder direkt von einem bestimmten Widget abzuleiten?

Hier sind zwei Beispiele, welches ist das beste?

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) 

Es scheint mir, dass die erste Version besser ist, da meine Komponente nicht technisch ein Gtk.Box ist, dann ist es ein Widget, das ein Gtk.Box verwendet, aber es könnte auch ein Gtk.Grid oder ein Gtk.DrawingArea verwenden .

So scheint es richtig auf einem Design-Standpunkt, aber vielleicht gibt es einige technische Details, die ich nicht sehe. Was ist dein Rat?

Antwort

1

Es hängt von der Abstraktion in Ihrem Kopf ab. Fragen Sie sich: Ist Ihre Komponente lediglich eine kundenspezifische Box oder etwas mehr?

Darüber hinaus benötigen Sie eigentlich Vererbung hier? Vielleicht können Sie einfach eine kostenlose Factory-Funktion deaktivieren, die eine Gruppe von Gtk.Widgets nach Ihren Wünschen erstellt.

+0

Noch eine andere mögliche Lösung! ;) In meinem Fall denke ich, dass ich es vorziehen würde, von einem Gtk.Widget abzuleiten, da das, was drin sein wird, ein komplexeres Widget sein wird, das ich mehrere Male wiederverwenden werde. Vielen Dank! – Creak

0

Ich verstehe nicht, warum Sie denken, dass das erste besser ist. Unterordnen Sie einfach, was Sie wirklich wollen. Eine Gtk.Box ist ein Gtk.Widget, also wo immer Sie letztere verwenden können, können Sie die ehemalige verwenden.

+0

Es geht mehr um objektorientierte Programmierung. Manchmal ist es besser, eine Aggregation als eine Ableitung zu machen. Auch dachte ich, dass GTK + vielleicht besser aus Gründen, die ich nicht kennen könnte, unter der Haube agieren würde;) – Creak

Verwandte Themen