web-dev-qa-db-ja.com

メインダイアログウィンドウから設定にアクセスするにはどうすればよいですか?また、新しい設定を追加するにはどうすればよいですか?

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)

メインダイアログ

self.PreferencesDialog.get_weight()???

2
Captain_Glen

わかりました、解決しました。

まず、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)

最初の引数は設定の名前、2番目はUIのウィジェット、3番目は設定に保存するデータを含むウィジェットのプロパティであることに注意してください。

また、コンボボックスについては、「入力あり」を有効にして、textプロパティを使用してテキストボックスを作成する必要がありました。

最後に、メインダイアログで次のことを行う必要がありました。

    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")
4
Captain_Glen