Портирование "import gobject" для использования GObject-Introspection. (PyGTK для PyGI и GTK 3)

Я пытался портировать библиотеку из PyGTK для использования GI и GTK3. Проблема в том, что я не могу найти ресурсы, специфичные для импорта объектов, но только для GTK. Я надеялся, что если кто-нибудь переведет для меня следующее, я пойму, как это сделать. Вещи GTK, кажется, довольно хорошо задокументированы, но я ничего не могу найти по этому поводу.


__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,))}

Мое предположение состояло в том, что, поскольку я не мог найти какую-либо конкретную документацию, что это было бы вопросом изменения названия констант, но я не могу найти никаких замен.

2 ответа

Решение

Думаю, я взломал код после dir()- все, что я мог найти в классе GObject =>

G_SIGNAL_RUN_FIRST находится в GSignalFlags enum, что переводится как GObject.SignalFlags.RUN_FIRST, Это соответствует, поэтому G_SIGNAL_MATCH_ID найдено в перечислении GSignalMatchType переводит на GObject.SignalMatchType.ID,

Не совсем очевидно, но достаточно просто, если вы знаете, что искать.

Как и в предыдущих комментариях, ваш перевод будет следующим:

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,))}

Тем не менее, согласно моему собственному опыту, некоторые типы Python как-то внутренне отображаются в их GObject коллеги (или, по крайней мере, это работает, как если бы они были), то есть object сопоставлен с GObject.TYPE_PYOBJECT а также None в GObject.TYPE_NONE, Следовательно, я считаю следующую версию более простой:

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,))}
Другие вопросы по тегам