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 呢?

更一般地说,在给定 C 文档的情况下,我如何自省 Gio 以找出如何从 python 中使用它?

4

2 回答 2

5

您可以使用常规的 python 解释器检查:

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

...ETC。它并不总是很有帮助,但至少你可以看到一个函数是否存在于命名空间中。根据文档,我希望这样的事情可以工作:

schema = gso.get_property('settings-schema')
if schema.has_key('focus-mode'):
    key = schema.get_key('focus-mode')
    print (key.get_range())
于 2014-06-27T08:16:54.683 回答
0

您还可以使用PyGobject 的在线文档

此函数将返回一个 GLib.Variant,它完全描述了对 self 有效的值范围。

返回的 GLib.Variant 类型是 (sv)。该字符串描述了有效范围限制的类型。变量中包含的值的类型和含义取决于字符串。

如果字符串是“类型”,那么变量包含一个空数组。该空数组的元素类型是预期的值类型,并且该类型的所有值都是有效的。

如果字符串是“枚举”,那么变量包含一个枚举可能值的数组。数组中的每一项都是可能的有效值,没有其他值是有效的。

如果字符串是“标志”,则变体包含一个数组。数组中的每一项都是一个值,在数组中可能出现零次或一次,用作此键的值。例如,如果变体包含数组 ['x', 'y'],则键的有效值将是 [], ['x'], ['y'], ['x', 'y' ] 和 ['y', 'x']。

最后,如果字符串是“范围”,那么变量包含一对类似类型的值——该键的最小和最大允许值。

正常程序不应使用此信息。它被认为是出于自省目的的提示。普通程序应该已经知道它们自己的模式允许什么。未来格式可能会发生任何变化——但特别是,可能会在上述可能性中添加新形式。

当不再需要返回值时,您应该使用 GLib.Variant.unref() 释放它。

该文档是一个宝石。顺便说一句,我相信您也会对以下内容感兴趣gso.get_enum(key)

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

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

提供未包含在 self 模式中或未标记为枚举类型的键是程序员错误。

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

2.26 版中的新功能。

于 2020-09-10T13:42:39.747 回答