Как мне получить доступ к настройкам из моего главного диалогового окна? Также как добавить новое предпочтение?

Попытка с помощью скрипта bash и расширение вашей команды. Я использую dateutils, чтобы добавить продолжительность времени.

Следовательно, для использования этого скрипта необходим пакет dateutils, доступный через apt. (sudo apt install dateutils)

Этот сценарий также учитывает текущее время безотказной работы (нынешняя сессия), следовательно, более точный. Секунды не учитываются. Самая низкая единица сообщения - минут.

#!/bin/bash
# Total uptime reported.
temp=$(last reboot --since 2016-01-01 --until 2016-12-31 | grep -o '(.*)' | grep  -v '-' | sed 's/(\([0-9]\{1,\}\)+\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1d\2h\3m/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1h\2m/g'  )
curr=$( cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60)'  )
echo "Total run time (days:hours:minutes)"
curr="2015-01-01T"$curr
org="2015-01-01T00:00:00"
new=$(dateutils.dadd $curr $temp )
dateutils.ddiff $org $new -f "%dd %Hh %Mm"
Сначала вы можете просмотреть и отформатировать время последней перезагрузки, чтобы извлечь день, часы, минуты и вторую информацию. Затем он сохраняется в temp. Исходная фальшивая дата устанавливается как org = 2015-01-01, к которой добавляется текущее время безотказной работы. Затем к переменной new добавляются все кумулятивные аппроксимации new. Длительность между org и временем безотказной работы new определяется разницей.

Вывод:

vayu@helix:$ ./uptime_record.sh
Total run time (days:hours:minutes)
57d 20h 36m

Следующий сценарий предназначен для безотказной работы точно в Выход: [!d10 ].

#!/bin/bash
# Total uptime reported since exactly 1 year (from the time script is run).
now="$(date +'%Y-%m-%d')" ;
last_y=$(dateutils.dadd $now -1y)
temp=$(last reboot --since "$last_y" --until "$now" | grep -o '(.*)' | grep  -v '-' | sed 's/(\([0-9]\{1,\}\)+\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1d\2h\3m/g ;s/(\([0-9]\{1,\}\):\([0-9]\{1,\}\))/\1h\2m/g'  )
curr=$( cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60)'  )
echo "Total run time in one year (days:hours:minutes)"
curr="1980-01-01T"$curr
org="1980-01-01T00:00:00"
new=$(dateutils.dadd $curr $temp )
dateutils.ddiff $org $new -f "%dd %Hh %Mm"
2
задан 20 June 2012 в 13:29

7 ответов

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 25 July 2018 в 18:24

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 2 August 2018 в 00:36

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 4 August 2018 в 16:06

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 6 August 2018 в 00:44

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 7 August 2018 в 18:09

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 10 August 2018 в 06:56

Хорошо, я решил это.

Сначала мне пришлось редактировать данные / glib-2.0 / schemas / net.launchpad.calorie-burner.gschema.xml:

Обратите внимание, что тип = "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, а thrid - свойство виджета, содержащего данные Я хочу сохранить в своих настройках.

Также обратите внимание, что для combobox я должен был включить «Имею запись», чтобы создать текстовое поле со свойством text.

Наконец, в моем главном диалоговом окне I должен был сделать следующее:

    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
ответ дан 15 August 2018 в 18:53

Другие вопросы по тегам:

Похожие вопросы: