Question

J'essaie d'utiliser des widgets de conteneur personnalisés dans les fichiers de définition de gtk.Builder. En ce qui concerne l’instanciation de ces widgets, cela fonctionne très bien:

#!/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()

Maintenant, la question est que disons que j'ai un widget gtk.TreeView dans cette boîte de dialogue. J'essaie de comprendre comment lier ce widget à une variable d'instance MyDialog.

Une alternative peu coûteuse à laquelle je peux penser est d'appeler une méthode supplémentaire après avoir obtenu le widget de dialogue comme suit:

dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)

Mais cela semble assez gênant. Quelqu'un a-t-il déjà résolu ce problème ou a-t-il une meilleure idée de la façon de le faire?

Merci,

Était-ce utile?

La solution

D'accord, je suppose que j'ai répondu à ma propre question.

Une des façons de procéder ci-dessus consiste à remplacer le paramètre parser_finished () de gtk.Buildable, qui donne accès à l’objet générateur qui a créé l’instance de classe elle-même. La méthode est appelée une fois le fichier .xml complet chargé. Ainsi, tous les widgets supplémentaires que nous souhaitons obtenir sont déjà présents et initiés:

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

Une chose à noter est que pour une raison quelconque (du moins pour moi, dans pygtk 2.12), si je n'hérite pas explicitement de gtk.Buildable, la méthode de substitution n'est pas appelée, même si elle était déjà gtk.Dialog implémente l'interface à construire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top