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,

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top