gtk.Builder, subclasse recipiente e elementos filhos de ligao
-
03-07-2019 - |
Pergunta
Eu estou tentando usar os widgets de contêineres personalizados em arquivos de definição gtk.Builder. Tanto quanto instanciar esses widgets, ele funciona muito bem:
#!/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()
Agora, a questão é que dizer que tenho um gtk.TreeView Widget dentro daquele diálogo. Eu estou tentando descobrir como ligar esse widget para uma variável de instância MyDialog.
Uma alternativa barata que posso pensar é chamar método adicional depois de obter o diálogo Widget assim:
dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)
Mas isso parece bastante estranho. Alguém resolveu este já ou tem uma idéia melhor de como vai fazer sobre isso?
Obrigado,
Solução
Tudo bem, eu acho que eu respondi minha própria pergunta.
Uma maneira de fazer o acima é para substituir parser_finished de gtk.Buildable (), que dá acesso ao objeto construtor que criou a instância de classe em si. O método é chamado depois de todo o arquivo .xml foi carregado, por isso todos os widgets adicionais que pode querer se apossar de já estão presentes e 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
Uma coisa a notar é que, por alguma razão (pelo menos para mim, em pygtk 2,12), se eu não explicitamente herdar de gtk.Buildable, o método de substituição não são chamados, até pensei gtk.Dialog já implementa a interface edificável.