如何在Python中使用g_settings_schema_get_key?

5 投票
2 回答
1159 浏览
提问于 2025-04-18 11:01

我正在按照这个链接 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 呢?

更一般来说,如何从Python中查看Gio,以便根据C语言的文档了解如何使用它呢?

2 个回答

0

你还可以查看PyGobject的在线文档

这个函数会返回一个GLib.Variant,它详细描述了当前对象(self)可以接受的值的范围。

返回的GLib.Variant类型是(sv)。这个字符串描述了当前的范围限制类型。这个变体中包含的值的类型和含义取决于这个字符串。

如果字符串是'type',那么变体包含一个空数组。这个空数组的元素类型就是期望的值类型,所有这种类型的值都是有效的。

如果字符串是'enum',那么变体包含一个数组,列出了所有可能的值。数组中的每个项目都是一个有效的值,其他值都不被允许。

如果字符串是'flags',那么变体包含一个数组。数组中的每个项目是一个值,可以在数组中出现零次或一次,作为这个键的值。例如,如果变体包含数组['x', 'y'],那么这个键的有效值可以是[]、['x']、['y']、['x', 'y']和['y', 'x']。

最后,如果字符串是'range',那么变体包含一对同类型的值——这个键允许的最小值和最大值。

这些信息不应该被普通程序使用。它们只是用于内部检查的提示。普通程序应该已经知道自己的模式允许什么。未来这个格式可能会有任何变化,特别是可能会增加新的形式。

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

这份文档真是宝贵的资源。顺便提一下,我相信你也会对gso.get_enum(key)感兴趣:

这个函数获取存储在当前对象(self)中的键的值,并将其转换为它所代表的枚举值。

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

如果给的键不在当前对象的模式中,或者没有标记为枚举类型,那就是程序员的错误。

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

这个功能在版本2.26中新增。

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

撰写回答