如何从主对话框窗口访问首选项?如何添加新首选项?

如何从主对话框窗口访问首选项?如何添加新首选项?
class PreferencesCalorieBurnerDialog(PreferencesDialog):
    __gtype_name__ = "PreferencesCalorieBurnerDialog"

       def finish_initializing(self, builder): # pylint: disable=E1002
           """Set up the preferences dialog"""
           super(PreferencesCalorieBurnerDialog, self).finish_initializing(builder)

           # Bind each preference widget to gsettings
           settings = Gio.Settings("net.launchpad.calorie-burner")
           widget = self.builder.get_object('example_entry')
           settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)

           #Custom preference
           widget = self.builder.get_object('weight')
           settings.bind("weight", widget, "float", Gio.SettingsBindFlags.DEFAULT)

主对话框

自我.PreferencesDialog.get_weight()???

答案1

好的,我解决了。

首先我必须编辑 data/glib-2.0/schemas/net.launchpad.calorie-burner.gschema.xml:

请注意,type="s" 表示字符串,type="i" 表示整数

<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="calorie-burner">
  <schema id="net.launchpad.calorie-burner" path="/net/launchpad/calorie-burner/">
    <key name="weight" type="i">
      <range min="1" max="350"/>
      <default>100</default>
      <summary>User's Weight Kgs</summary>
    </key>
    <key name="units" type="s">
      <choices>
        <choice value='Metric'/>
        <choice value='Imperial'/>
      </choices>
      <default>'Metric'</default>
    </key>
    <key name="energy" type="s">
      <choices>
        <choice value='KJs'/>
        <choice value='Calories'/>
      </choices>
      <default>'KJs'</default>
    </key>
  </schema>
</schemalist>

接下来我必须将我的 UI 元素与我的偏好联系起来:

在首选项对话框中我必须执行以下操作:

    # Bind each preference widget to gsettings
    settings = Gio.Settings("net.launchpad.calorie-burner")

    widget = self.builder.get_object('weight')
    settings.bind("weight", widget, "value", Gio.SettingsBindFlags.DEFAULT)

    widget = self.builder.get_object('cmbUnits-entry')
    settings.bind("units", widget, "text", Gio.SettingsBindFlags.DEFAULT)

    widget = self.builder.get_object('cmbEnergy-entry')
    settings.bind("energy", widget, "text", Gio.SettingsBindFlags.DEFAULT)

请注意,第一个参数是设置的名称,第二个参数是 UI 上的小部件,第三个参数是包含我想要存储在我的首选项中的数据的小部件的属性。

另请注意,对于组合框,我必须启用“Has Entry”才能创建具有文本属性的文本框。

最后,在我的主对话框中我必须执行以下操作:

    from gi.repository import Gtk, Gio # pylint: disable=E0611
    self.settings = Gio.Settings("net.launchpad.calorie-burner")

要访问设置,请使用设置名称调用 get_string 或 get_int:

  self.settings.get_string("energy")
  self.settings.get_string("units")
  self.settings.get_int("weight")

相关内容