如何在Python中使用g_settings_schema_get_key?
我正在按照这个链接 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 个回答
你还可以查看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中新增。
你可以使用普通的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())