Как я могу работать с GLib.Array в Python?

Я пишу плагин для Rhythmbox, в котором сигнал, поднятый , передается в объект типа GArray . Документация для GLib Arrays показывает мне несколько методов, которые меня интересуют, но я не могу получить доступ.

Например, g_array_index может получить мне n-й элемент в GArray, но я не могу назвать его. Объект GArray также не показывает мне никаких полезных методов.

Чтобы понять, что я имею в виду, сделайте это в консоли Python:

 from gi.repository.GLib import Array x = Array() dir(x) 

Вот результат работы dir (x)

 ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__gtype__', '__hash__', '__info__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_free_on_dealloc', 'copy', 'data', 'len'] 

Я не вижу здесь никаких методов чтения из массива и ничего о g_array_index или других методах, упомянутых на странице документации GLib Arrays. Я также пробовал

  for a in x: print a 

А также

 list(x) 

Но я получаю сообщение об ошибке:

 TypeError: 'Array' object is not iterable 

Попытка x [0] дает следующее:

 TypeError: 'Array' object does not support indexing 

Свойство len дает длину массива, как ожидается.

Свойство data дает это

введите описание изображения здесь

Как я могу работать с этим GLib.Array, что меня передают?

Я запускаю Python 2.7.4

  • Удалите Django полностью
  • Как обрабатывать \ 2 в пути Windows с помощью Python?
  • From-Import при сохранении доступа по модулю
  • В Python, почему list автоматически глобально?
  • Python Google Voice
  • Передать переменную в модуле Python
  • py2exe MemoryLoadLibrary не удалось загрузить _ssl.pyd, Win7 <-> Win10
  • ImportError: не может импортировать имя MAXREPEAT с cx_Freeze
  • One Solution collect form web for “Как я могу работать с GLib.Array в Python?”

    GArray не был должным образом аннотирован / экспортирован, поэтому он не сопоставляется с объектом Python, как вы ожидали. Фактически вы можете проверить с помощью фрагмента C в конце, что именно экспортируется и что увидит модуль Python.

     info_type = 3 [3 == struct] n_fields = 2, n_methods = 0 

    Как вы можете видеть, экспортируются только два поля ( len и data ). Итак, чтобы ответить на ваш вопрос: на данный момент вы не можете работать с GLib.Array в Python.

    Вот код:

     #include <girepository.h> int main (int argc, char const* argv[]) { GIBaseInfo *info; GIStructInfo *struct_info; GITypelib *typelib; GIInfoType info_type; typelib = g_irepository_require (NULL, "GLib", NULL, 0, NULL); info = g_irepository_find_by_name (NULL, "GLib", "Array"); info_type = g_base_info_get_type(info); g_print ("info_type = %i [3 == struct]\n", info_type); struct_info = (GIStructInfo *) info; g_print ("n_fields = %i, n_methods = %i\n", g_struct_info_get_n_fields (struct_info), g_struct_info_get_n_methods (struct_info)); g_base_info_unref (info); g_typelib_free (typelib); return 0; } 
    Python - лучший язык программирования в мире.