Pergunta

Eu tenho um pequeno projeto que usa libglade e use o seguinte para carregar o arquivo xml:

self.gladefile = "sdm.glade"
self.wTree = gtk.glade.XML(self.gladefile) 
self.window = self.wTree.get_widget("MainWindow")
if (self.window):
    self.window.connect("destroy", gtk.main_quit)
dic = { "on_button1_clicked" : self.button1_clicked, 
        "on_MainWindow_destroy" : gtk.main_quit}
self.wTree.signal_autoconnect(dic)

Depois de converter meu projeto na clareira, que mudanças estruturais que eu preciso fazer? Eu estou no Ubuntu 9.04.

Foi útil?

Solução

Você precisa usar gtk.Builder vez. Esta classe pode carregar qualquer número de arquivos de interface do usuário, de modo que você precisa para adicioná-los manualmente, seja como arquivos ou como strings:

self.uifile = "sdm.ui"
self.wTree = gtk.Builder()
self.wTree.add_from_file(self.uifile)

Em vez de get_widget, basta usar get_object na classe construtor:

self.window = self.wTree.get_object("MainWindow")
if self.window:
    self.window.connect("destroy", gtk.main_quit)

Para conectar os sinais, basta usar connect_signals, que também tem um dicionário:

dic = { "on_button1_clicked" : self.button1_clicked, 
    "on_MainWindow_destroy" : gtk.main_quit}
self.wTree.connect_signals(dic)

Ela costumava ser o caso (pelo menos em GTK + 2.12, não tenho certeza se ele ainda é o mesmo) que você poderia chamar connect_signals apenas uma vez, todos os sinais que não estão ligados durante a primeira invocação nunca será conectado. Este foi diferente na clareira, por isso tome cuidado se você contou com esse recurso antes.

Outras dicas

A resposta de Torsten está correto, mas um pouco incompleta, assim, no espírito de http://xkcd.com/979/ aqui é o procedimento I recentemente liquidada em depois de muita tentativa e erro:

yada.glade Open in Glade designer de interface. Ir para edit-> projeto e alterar o tipo de projeto para GtkBuilder e certifique-se que tem como alvo a versão mais recente (2,24 como esta escrito). Salve o arquivo, certificando-se que ele salva em formato GtkBuilder, e alterar o nome de yada.glade para yada.ui

Open yada.py e altere o seguinte código:

gladefile = relativize_filename(os.path.join("glade", "yada.glade"))
self.wTree = gtk.glade.XML(gladefile, self.windowname)

para:

uifile = relativize_filename(os.path.join("glade", "yada.ui"))
self.wTree = gtk.Builder()
self.wTree.add_from_file(uifile)

Da mesma forma mudar todas as instâncias do self.wTree.get_widget(...) para self.wTree.get_object(...)

Alterar self.wTree.signal_autoconnect(dic) para self.wTree.connect_signals(dic)

Se o seu código depende o nome atribuído o widget no designer de interface, mudança widget.get_name() para gtk.Buildable.get_name(widget). widget.get_name() agora só retorna o tipo de widget. EDIT:. Você também precisa mudar widget.set_name('my_widget') para gtk.Buildable.set_name(widget, 'my_widget')

import gtk.glade Excluir

Eu encontrei inúmeros sinais não utilizados definidos no arquivo yada.ui xml, eu tive que abrir o arquivo xml e manualmente excluí-los para eliminar os avisos que eles causados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top