gtk.Builder, Containerunterklasse und Bindung Kind-Widgets
-
03-07-2019 - |
Frage
Ich versuche, benutzerdefinierte Container-Widgets in gtk.Builder Definitionsdateien zu verwenden. Soweit diese Widgets instanziiert wird, es funktioniert super:
#!/usr/bin/env python
import sys
import gtk
class MyDialog(gtk.Dialog):
__gtype_name__ = "MyDialog"
if __name__ == "__main__":
builder = gtk.Builder()
builder.add_from_file("mydialog.glade")
dialog = builder.get_object("mydialog-instance")
dialog.run()
Nun ist die Frage, die sagen, dass ich ein gtk.TreeView Widget innerhalb dieses Dialogs haben. Ich versuche, herauszufinden, wie dieses Widget auf eine MyDialog Instanzvariable zu binden.
Eine billige Alternative, die ich denken kann, ist eine zusätzliche Methode aufrufen, nachdem das Dialog Widget wie so bekommen:
dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)
Aber das scheint ziemlich umständlich. Hat jemand löste dies bereits oder hat eine bessere Idee, wie man über es zu tun?
Danke,
Lösung
In Ordnung, ich denke, ich meine eigene Frage beantwortet.
Eine Möglichkeit, die oben zu tun ist, gtk.Buildable des parser_finished () außer Kraft zu setzen, die den Zugang zum Builder Objekt gibt, das die Klasseninstanz erstellt selbst. Die Methode wird aufgerufen, nachdem gesamte XML-Datei geladen wurde, so alle zusätzlichen Widgets sind wir halten bereits bekommen kann und intialized:
class MyDialog(gtk.Dialog, gtk.Buildable):
__gtype_name__ = "MyDialog"
def do_parser_finished(self, builder):
self.treeview = builder.get_object("treeview1")
# Do any other associated post-initialization
Eine Sache ist zu beachten, dass aus irgendeinem Grunde (zumindest für mich, in pygtk 2.12), wenn ich nicht ausdrücklich von gtk.Buildable erbt, wird die Überschreibung Methode nicht aufgerufen, dachte sogar gtk.Dialog bereits implementiert die bebaubare Schnittstelle.