Как мне использовать g_settings_schema_get_key из python?

Я следую за http://www.micahcarrick.com/gsettings-python-gnome-3.html чтобы использовать GSettings из python, и мне удалось прочитать значение:

from gi.repository import Gio
gso=Gio.Settings.new("org.gnome.desktop.wm.preferences")
gso.get_value("focus-mode")

Это возвращает "GLib.Variant", одно из набора значений перечисления. Чтобы получить действительные перечисления, которые я могу установить, я использую:

gso.get_range("focus-mode")

Тем не менее, документы говорят

Начиная с версии 2.40, g_settings_get_range устарела и не должна использоваться во вновь создаваемом коде. Вместо этого используйте g_settings_schema_key_get_range().

Итак, как мне использовать g_settings_schema_key_get_range из python?

В более общем смысле, как я могу разобраться в Gio, чтобы понять, как использовать его с python, учитывая документы C?

1 ответ

Вы можете использовать обычную проверку интерпретатора Python:

>>> from gi.repository import Gio
>>> help (Gio)
>>> help (Gio.Settings)
>>> help (Gio.SettingsSchema)

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

schema = gso.get_property('settings-schema')
if (schema.has_key('focus-mode')):
    key = schema.get_key('focus-mode')
    print (key.get_range ())

Вы также можете использовать онлайн-документацию для PyGobject:

Эта функция вернет GLib.Variant, который полностью описывает диапазон значений, допустимых для self.

Возвращаемый тип GLib.Variant - (sv). Строка описывает тип действующего ограничения диапазона. Тип и значение значения, содержащегося в варианте, зависят от строки.

Если строка имеет тип 'type', тогда вариант содержит пустой массив. Тип элемента этого пустого массива является ожидаемым типом значения, и все значения этого типа допустимы.

Если строка - enum, то вариант содержит массив, в котором перечислены возможные значения. Каждый элемент в массиве является возможным допустимым значением, и никакие другие значения не допустимы.

Если строка - "flags", тогда вариант содержит массив. Каждый элемент в массиве - это значение, которое может встречаться в массиве ноль или один раз и использоваться в качестве значения для этого ключа. Например, если вариант содержит массив ['x', 'y'], то допустимые значения для ключа будут [], ['x'], ['y'], ['x', 'y'] и ['y', 'x'].

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

Эта информация не должна использоваться обычными программами. Считается, что это подсказка для самоанализа. Нормальные программы уже должны знать, что разрешено их собственной схемой. Формат может измениться любым образом в будущем - но, в частности, новые формы могут быть добавлены к возможностям, описанным выше.

Вы должны освободить возвращаемое значение с помощью GLib.Variant.unref(), когда оно больше не нужно.

Эта документация - жемчужина. Кстати, я думаю, вам также будет интересно gso.get_enum(key):

Получает значение, которое хранится в self для ключа, и преобразует его в значение перечисления, которое оно представляет.

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

Ошибка программиста - дать ключ, который не содержится в схеме для self или не помечен как перечислимый тип.

Если значение, хранящееся в базе данных конфигурации, не является допустимым значением для перечислимого типа, эта функция вернет значение по умолчанию.

Новое в версии 2.26.

Другие вопросы по тегам