我该如何在Python中使用g_settings_schema_get_key?

4

我正在使用http://www.micahcarrick.com/gsettings-python-gnome-3.html中的指南,通过python使用GSettings,我已经成功读取了一个值:

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")

然而,文档说明

g_settings_get_range自2.40版本起已被弃用,不应在新编写的代码中使用。 改用g_settings_schema_key_get_range()。

那么,我如何从Python中使用g_settings_schema_key_get_range呢?

更一般地说,我如何内省Gio以了解如何从C文档中给出的信息中使用它?

2个回答

5
您可以使用常规的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())

实际上,输出是 ('enum', <['click', 'sloppy', 'mouse']>)。谢谢! - ederag

0

你也可以使用PyGobject在线文档

此函数将返回一个 GLib.Variant,完整描述了 self 可接受的值范围。
GLib.Variant 的类型为 (sv)。字符串描述了有效的范围限制类型。包含在 variant 中的值的类型和含义取决于字符串。
如果字符串是“type”,则 variant 包含一个空数组。该空数组的元素类型是预期值的类型,所有该类型的值都是有效的。
如果字符串是“enum”,则 variant 包含一个枚举可能值的数组。数组中的每个项目都是可能的有效值,没有其他值是有效的。
如果字符串是“flags”,则 variant 包含一个数组。数组中的每个项目都是可以出现零次或一次的值,用作此键的值的数组。例如,如果 variant 包含数组 ['x', 'y'],则键的有效值将是 []、['x']、['y']、['x', 'y'] 和 ['y', 'x']。
最后,如果字符串是“range”,则 variant 包含一对相同类型的值——此键的最小和最大允许值。
正常程序不应使用此信息。它被认为是内省目的的提示。正常程序应已经知道其自己模式允许什么。格式可能会以任何方式更改,但特别是可能会添加到上述可能性中。
当不再需要时,您应使用 GLib.Variant.unref() 释放返回的值。

这份文档是一颗宝石。顺便说一下,我相信你也会对 gso.get_enum(key) 感兴趣:

获取存储在 self 中的 key 的值,并将其转换为它所代表的枚举值。

为了使用此函数,值的类型必须是字符串,并且在模式文件中必须标记为枚举类型。

如果给定的 key 不包含在 self 的模式中或未标记为枚举类型,则是程序员错误。

如果配置数据库中存储的值不是枚举类型的有效值,则此函数将返回默认值。

版本 2.26 中新增。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接