Что такое XML-файл схемы в папке data/glib-2.0 моего приложения Quickly?
Я создал приложение 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)
и я не уверен, что это делает.
1 ответ
Файл 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, который вы можете использовать для привязки виджетов для хранения настроек. Параметр должен точно соответствовать атрибуту id элемента схемы в XML.
settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)
Это создает связь между example
введите схему, чтобы text
собственность widget
, Значение, которое передается ключу, является текстовым свойством указанного виджета. Для GtkEntry текст является наиболее очевидным свойством для использования. Поскольку оно связано, при каждом изменении значения свойства в окне настроек оно автоматически обновляется. Последний параметр определяет, в каком направлении работает привязка - см. Документацию для получения дополнительной информации.
Тип, указанный в XML для ключа, должен соответствовать одному из доступных параметров. Как правило, один символ, который вы увидите на фоне определенной константы. Например, для логического:
#define G_VARIANT_TYPE_BOOLEAN ((const 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)
Доступ к настройкам можно получить с помощью функции get, специфичной для типа данных. например
settings = Gio.Settings("net.launchpad.sample-application")
example = settings.get_string("example")
complete = settings.get_boolean("complete")