Como eu acesso as preferências da minha janela de diálogo principal? Além disso, como adiciono uma nova preferência?

2
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)

Diálogo principal

self.PreferencesDialog.get_weight () ???

    
por Captain_Glen 20.06.2012 / 04:27

1 resposta

4

Ok, resolvi isso.

Primeiro eu tive que editar dados / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Observe que type="s" é para strings e type="i" é para inteiros

<?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>

Em seguida, tive que conectar meus elementos de interface do usuário às minhas preferências:

Na janela de preferências eu tive que fazer o seguinte:

    # 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)

Observe que o primeiro argumento é o nome da configuração, o segundo é o widget na interface e o thrid é a propriedade do widget que contém os dados que eu quero armazenar nas minhas preferências.

Observe também que para as caixas de combinação eu tive que ativar "Has Entry" para criar uma caixa de texto com a propriedade text.

Por fim, na minha caixa de diálogo principal, tive que fazer o seguinte:

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

Para acessar as configurações, chame get_string ou get_int com o nome da configuração:

  self.settings.get_string("energy")
  self.settings.get_string("units")
  self.settings.get_int("weight")
    
por Captain_Glen 20.06.2012 / 07:52