Вопрос Сохранение предпочтений и данных приложений


Я смотрю на создание некоторых приложений Ubuntu, но найти хорошие ресурсы сложно.

Я использую быстрый инструментарий, но мне очень хотелось бы узнать больше. Как обычно можно сохранить настройки и настройки приложения в Linux / Ubuntu.

Это так же просто, как создание XML-файла и сохранение информации, а затем чтение из указанного файла при загрузке приложения?

Если кто-то может указать мне в направлении, то это будет очень признательно.

РЕДАКТИРОВАТЬ

Это то, что я написал, ожидая ответа. Наверное, именно то, что предпочитает, но просто закодировано. Вам может показаться полезным:

import ConfigParser, os # We need to be able to store and recal settings

#first try to read the config.cfg file
config = ConfigParser.RawConfigParser()
configFile = 'data/config.cfg'

# We need to set some defaults
monState = False
tueState = False
wedState = False
thurState = False
friState = False
satState = False
sunState = False

# Creating the Config file
def createConfigFile(fileName):
    print "CREATING CONFIG" # not needed, but nice for debugging
    config.add_section('Preferences')
    config.set('Preferences', 'mon', False)
    config.set('Preferences', 'tues', False)
    config.set('Preferences', 'wed', False)
    config.set('Preferences', 'thur', False)
    config.set('Preferences', 'fri', False)
    config.set('Preferences', 'sat', False)
    config.set('Preferences', 'sun', False)
    rewriteConfigFile(filename)

# After reading the config file, we can update configs in memory. 
# But this will save it to file for when the application is started up again. 
def rewriteConfigFile(filename):    
    with open(filename, 'wb') as configfile:
        config.write(configfile)

# Reading the config file 
def readConfigFile(fileName):
    print "READING CONFIG"  # not needed, but nice for debugging
    global monState, tueState, wedState, thurState, friState, satState, sunState
    monState = config.getboolean('Preferences', 'mon')
    tueState = config.getboolean('Preferences', 'tues')
    wedState = config.getboolean('Preferences', 'wed')
    thurState = config.getboolean('Preferences', 'thur')
    friState = config.getboolean('Preferences', 'fri')
    satState = config.getboolean('Preferences', 'sat')
    sunState = config.getboolean('Preferences', 'sun')

# If the config does not exist, create it, then read it. Otherwise simply read it
if not config.read(configFile):    
    createConfigFile(configFile)
    readConfigFile(configFile)    
else:
    readConfigFile(configFile)

4
2017-11-07 10:24


происхождения


Взгляните на эти вопросы: askubuntu.com/questions/59822/...  askubuntu.com/questions/4420/... - mivoligo


ответы:


Быстрые приложения используют схемы glib для предпочтений приложения. Схема по умолчанию создается в data/glib-2.0/schemas, Это xml-файл, называемый net.launchpad.XXXX.gschema.xml где XXXX - ваше имя приложения.

Вот пример записи:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="drawers">
  <schema id="net.launchpad.drawers" path="/net/launchpad/drawers/">
    <key name="maxicons-row" type="i">
      <range min="1" max="15"/>
      <default>5</default>
      <summary>Maximum Icons per Row</summary>
      <description>Minimum value = 1 Max=15</description>
    </key>
  </schema>
</schemalist>

Ключи могут быть целыми числами (type = "i"), boolean (type = "b") или floats (type = "d"). Используйте только строчные буквы и - в именах ключей.

Чтобы получить доступ к настройкам и привязать их к виджетам, вы можете получить их следующим образом (взятые из PreferencesXXXXWindow.py, сгенерированного быстро):

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

    # Bind each preference widget to gsettings
    self.settings = Gio.Settings("net.launchpad.drawers")
    widget = self.builder.get_object('maxicons_row')
    self.settings.bind("maxicons-row", widget, "value", Gio.SettingsBindFlags.DEFAULT)

Чтобы прочитать значения для переменных внутри программы, вы можете сделать следующее:

from gi.repository import Gio
settings = Gio.Settings("net.launchpad.drawers")
integer=settings.get_int("intsetting")
float = settings.get_double("floatsetting")
bool = settings.get_boolean("booleansetting")

Надеюсь, это поможет.


2
2017-11-08 19:17



Спасибо, Ян, это определенно более элегантно, чем мое решение, с которым я закончил. - Rudi Strydom


Если вы сохраняете пользовательские данные, вы обычно сохраняете их под $ HOME / .config / $ YOURAPP / (хотя пользователь может изменить это, поэтому лучше использовать xdg.BaseDirectory.xdg_config_home).

Если вы используете Python, я рекомендую ConfigParser которая упрощает чтение и запись структурированных файлов конфигурационных файлов.


2
2017-11-08 14:48





У меня нет опыта работы с Linux. Но аналогичная проблема, с которой я столкнулся во время работы над своим приложением.

В linux каждое приложение генерирует файл, содержащий все настройки. Если это собственное приложение для Linux, вы можете легко найти файл в папке «/ etc /».

пожалуйста, предоставьте несколько примеров названия приложения для более подробной информации.

Надеюсь, это поможет вам найти свой путь.


0
2017-11-07 10:44



/ etc / для общесистемных настроек, а не для пользовательских настроек. - mhall119