Позволит ли PyGObject использовать массив Python array.array для передачи массива чисел с плавающей точкой в ​​библиотеку (Gimp)? - PullRequest
0 голосов
/ 24 февраля 2020

Некоторые методы Gimp, предоставляемые с помощью GI (GObject introspection), ожидают GValue, значением которого является GArray of float. В Python могу ли я создать массив array.array с плавающей точкой и ожидать, что PyGObject правильно его перенаправит в GArray? (грубо говоря, указатель на число с плавающей точкой и целое число элементов в массиве.)

В частности, Gimp 2.99 (ветвь разработки) имеет в своем API:

@accepts(GObject.Value, float, gsize)
@returns(none)
def value_set_float_array(value, array, length):
    # Python wrapper for gimp_value_set_float_array()

IOW действительно ожидает адрес (указатель) на первый float из множества float, смежных в памяти, «массив». Если в Python я создам массив array.array, содержащий четыре числа с плавающей точкой, и передам его в качестве второго аргумента в Gimp.value_set_float_array (), будет ли PyGObject делать правильные вещи?

Я знаю, что могу просто попробовать, или прочитайте код PyGObject. Но даже если бы я мог заставить его работать, я считаю, что Gimp API мог бы быть лучше, если бы у него был конструктор для GValue (или конструктор для другого типа Gimp Gimp.FloatArray), который принимает GArray. Тогда я понимаю, что PyGObject будет автоматически компилировать список Python с плавающей точкой в ​​GArray. Другими словами, мой вопрос касается руководства по архитектуре интроспективного API GObject.

Gimp поддерживает другие привязки, такие как Lua и Scheme. Мне кажется, что Gimp должен поддерживать аргументы GArray, которые, вероятно, будут поддерживать все привязки.

(Вопрос возникает из-за попытки использовать тип Gimp.FloatArray, который не является GObject. Может быть, проблема больше, что Gimp должен основывать Gimp.FloatArray на GObject?)

1 Ответ

0 голосов
/ 25 февраля 2020

Я считаю это может работать, вам просто нужно использовать аннотацию (element-type float) в документах: https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations

...