Portando “import gobject” para usar o GObject-Introspection. (PyGTK para PyGI e GTK 3)

5

Eu tenho tentado portar uma biblioteca do PyGTK para usar o GI e o GTK3. O problema é que não consigo encontrar nenhum recurso específico para as importações do gobject, mas apenas para o GTK. Eu estava esperando que se alguém pudesse traduzir o seguinte para mim, eu teria uma idéia de como fazer isso. As coisas do GTK em si parecem estar bem documentadas, mas não consigo encontrar nada sobre isso.


__gsignals__ = {'cell-edited' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
    (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, 
    gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT)), 'selection-changed' : 
    (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))}

Minha suposição era, desde que eu não encontrei nenhuma documentação específica, que seria uma questão de mudar o nome das constantes, mas não consigo encontrar nenhuma substituição.

    
por Jo-Erlend Schinstad 24.10.2011 / 15:55

2 respostas

4

Acho que decifrei o código depois de dir () - tudo o que consegui encontrar na classe GObject = >

G_SIGNAL_RUN_FIRST é encontrado no GSignalFlags enum, que é traduzido como GObject.SignalFlags.RUN_FIRST . Isso é consistente, por isso G_SIGNAL_MATCH_ID encontrado no enum GSignalMatchType é convertido em GObject.SignalMatchType.ID .

Não é totalmente óbvio, mas é fácil quando você sabe o que procurar.

    
por Jo-Erlend Schinstad 24.10.2011 / 17:36
4

Como nos comentários anteriores, a tradução que você fez seria a seguinte:

from gi.repository import GObject

__gsignals__ = {'cell-edited': (GObject.SignalFlags.RUN_LAST,
                                GObject.TYPE_NONE,
                                (GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT)),
                'selection-changed': (GObject.SignalFlags.RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT,))}

No entanto, de acordo com minha própria experiência, alguns tipos python são mapeados internamente de alguma forma para suas contrapartes GObject (ou pelo menos, funciona como se fossem), ou seja, object é mapeado para GObject.TYPE_PYOBJECT e None to GObject.TYPE_NONE . Por isso, acho a seguinte versão mais direta:

from gi.repository import GObject

__gsignals__ = {'cell-edited': (GObject.SignalFlags.RUN_LAST,
                                None, (object, object, object, object, object)),
                'selection-changed': (GObject.SignalFlags.RUN_LAST, None, (object,))}
    
por jcollado 09.11.2011 / 09:58