Domanda

Sto cercando di utilizzare widget contenitore personalizzati nei file di definizione di gtk.Builder. Per quanto riguarda l'istanza di quei widget, funziona benissimo:

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

Ora la domanda è che dire che ho un widget gtk.TreeView all'interno di quella finestra di dialogo. Sto cercando di capire come associare quel widget a una variabile di istanza MyDialog.

Un'alternativa economica che mi viene in mente è quella di chiamare un metodo aggiuntivo dopo aver ottenuto il widget di dialogo in questo modo:

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

Ma sembra abbastanza imbarazzante. Qualcuno ha già risolto questo problema o ha un'idea migliore su come procedere?

Grazie,

È stato utile?

Soluzione

Bene, immagino di aver risposto alla mia domanda.

Un modo per fare quanto sopra è sovrascrivere gtk.Buildable's parser_finished (), che dà accesso all'oggetto builder che ha creato l'istanza della classe stessa. Il metodo viene chiamato dopo che è stato caricato l'intero file .xml, quindi tutti i widget aggiuntivi che potremmo voler ottenere sono già presenti e inizializzati:

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

Una cosa da notare è che per qualche motivo (almeno per me, in pygtk 2.12), se non eredito esplicitamente da gtk. Costruibile, il metodo override non viene chiamato, anche se pensavo già gtk.Dialog implementa l'interfaccia costruibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top