Я создал приложение Ubuntu с помощью Quickly и вижу файл XML в папке data / glib-2.0 в корневом каталоге моего проекта, и я не совсем уверен, для чего это нужно. XML выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="sample-application">
<schema id="net.launchpad.sample-application" path="/net/launchpad/sample-application/">
<key name="example" type="s">
<default>''</default>
<summary>Sample setting</summary>
<description>Longer description of this sample setting. Talk about allowed values and what it does.</description>
</key>
</schema>
</schemalist>
Кроме того, в коде диалога настроек по умолчанию, который создается с новым приложением, я вижу следующий код:
settings = Gio.Settings("net.launchpad.sample-application")
widget = self.builder.get_object('example_entry')
settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)
не уверен, что это делает.
XML-файл определяет ряд ключей, которые можно использовать всюду по приложению для хранения пользовательских настроек.
В схеме элемента Вы заметите два атрибута: идентификатор и путь. Идентификатор - то, что Вы используете для обращения к схеме в коде при инстанцировании объекта настроек. Путь - то, где ключи хранятся.
Можно найти настройки путем установки dconf-tools
пакет и выполнение dconf-editor
. Затем перейдя к узлу, определенному выше. Узел в XML в вопросе (/net/launchpad/sample-application) был бы здесь:
Схема используется против API GSettings. Вы видите GTK C базирующиеся документы здесь: http://developer.gnome.org/gio/stable/GSettings.html. Это - часть модуля Gio
Что касается кода.
settings = Gio.Settings("net.launchpad.sample-application")
Это создает объект GSettings, который можно использовать для привязки виджетов с для хранения настроек. Параметр должен соответствовать точно идентификационному атрибуту элемента схемы в XML.
settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)
Это создает привязку между example
введите схему, к text
свойство widget
. Значение, которое передается ключу, является текстовым свойством указанного виджета. Для GtkEntry текст является самым очевидным свойством для использования. Поскольку это связывается, каждый раз, когда Вы изменяете значение свойства в предпочтительном окне, это автоматически обновляется. Заключительный параметр определяет, какое направление обязательные работы - видят документы для получения дополнительной информации.
Тип, который Вы указываете в XML для ключа, должен соответствовать одному из доступных вариантов. Обычно отдельный символ, который Вы будете видеть против определенной константы. Например, для булевской переменной:
#define G_VARIANT_TYPE_BOOLEAN ((константа GVariantType *) "b")
Так булев приравнивается к b
.
Так, просто скажите желание булева ключа Вы могли добавить следующее под элементом схемы, вместе с другим ключом:
<key name="complete" type="b">
<default>false</default>
<summary>Whether the task is complete</summary>
<description>This key is used to determine if a particular part of the application is complete or not</description>
</key>
Затем свяжите активное свойство как так:
# Get the widget (named chk_complete)
complete = self.ui.chk_complete
# Bind the property
settings.bind("complete", complete, "active", Gio.SettingsBindFlags.DEFAULT)
К настройкам можно затем просто получить доступ с получить функцией, характерной для типа данных. например.
settings = Gio.Settings("net.launchpad.sample-application")
example = settings.get_string("example")
complete = settings.get_boolean("complete")