5

Rhythmbox のプラグインを作成しています。発生したシグナルは type のオブジェクトに渡されますGArrayGLib 配列のドキュメントには、私が興味を持っているがアクセスできないいくつかのメソッドが示されています。

たとえば、g_array_indexは GArray のn 番目の項目を取得できますが、それを呼び出すことができません。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 配列のドキュメントページに記載されているメソッドやその他のメソッドについても何も表示されません。私も試しました

    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 を実行しています

4

2 に答える 2

0

GArray適切に注釈/エクスポートされていないため、期待どおりに Python オブジェクトにマップされません。実際、最後にある C スニペットで、正確に何がエクスポートされ、Python モジュールが何を見るかを確認できます。

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

ご覧のとおり、2 つのフィールド (lendata) のみがエクスポートされます。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;
}
于 2014-09-03T10:40:31.230 に答える