最后我想通了。想我会在这里分享我的发现。实际上有人已经为python解释了这一点(下面的链接)。
将 GSettings 与 Python/PyGObject 一起使用
创建架构
对于开发人员来说,工作从定义设置的模式开始。模式是一个看起来像这样的 XML 文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schemalist SYSTEM "gio_gschema.dtd" >
<schemalist>
<schema id="org.gtk.skanray.emlibrary"
path="/org/skanray/emlibrary/" gettext-domain="emlibrary">
<key name="wave-pressure-ptrach-visible" type="b">
<default>true</default>
<summary>Set visibility of 'Ptrach' trace in pressure waveform.</summary>
<description>The pressure waveform shows multiple traces where 'PAW' is always enabled and additionally 'Ptrach' can be displayed. This settings affects the visibility of the trachial pressure trace shown in this waveform channel.</description></key>
</schema>
</schemalist>
文件名必须具有“.gschema.xml”后缀。架构文件应该在项目路径中,以便将其推送到 SVN。最好使用支持从 DTD 文件设计 XML 文件的 XML 编辑器(例如 Eclipse)。使用以下 DTD 文件。
gschema.dtd
可以将从 GVariant 派生的任何内容存储到 GSettings 中。请参阅以下页面以了解要在模式中使用的基本类型和“类型”属性。
GVariant 格式字符串
编译架构
准备好架构后,(sudo)将其复制到 /usr/share/glib-2.0/schemas/ 然后运行,
> sudo glib-compile-schemas /usr/share/glib-2.0/schemas/
此时,可以使用 dconf 编辑器看到/修改新添加的设置。
从应用程序访问 GSettings
来到节目的主要事件,这就是应用程序如何读取(和/或写入)设置。不需要将对象的属性绑定到 GSettings 中的“键”,它也可以被查询和使用。有关详细信息,请参阅 GSettings API 参考。
Glib::RefPtr <Gio::Settings> refSettings = Gio::Settings::create(“org.gtk.skanray.emlibrary”);
CLineTrace * pTrace = NULL; // CLineTrace is derived from Gtk::Widget
…
pTrace = …
…
if(refSettings)
{
refSettings->bind("wave-pressure-ptrach-visible",
pTrace,
"visible",
Gio::SETTINGS_BIND_DEFAULT);
}
现在您可以启动dconf 编辑器并测试设置。
笔记
通常首选在类构造函数中进行绑定。然而,绑定到小部件的“可见”属性可能有点棘手。通常,顶层窗口将 show_all() 作为其构造函数的最后一行。然而,顶级窗口子级的构造函数将完成执行,包括进行绑定。如果存在将“可见性”存储为 false 的设置,那么顶层窗口对 show_all() 的调用将与该设置混淆。在这种情况下,建议在相应类的 on_map() 处理程序中执行一次绑定。