سؤال تخزين تفضيلات التطبيق والبيانات


أنا أبحث في إنشاء بعض تطبيقات أوبونتو ، ولكن العثور على resoures جيدة من الصعب.

أنا أستخدم مجموعة الأدوات السريعة ، لكني أحب حقاً المزيد من الأفكار. كيف يمكن للمرء عادة تخزين تفضيلات التطبيق والإعدادات في لينكس / أوبونتو.

هل هو بسيط مثل إنشاء ملف XML وحفظ المعلومات ثم القراءة من الملف المذكور على bootstrap التطبيق؟

إذا كان شخص ما يمكن أن يشير لي في اتجاه سيكون موضع تقدير كبير.

تصحيح

هذا شيء كتبته في انتظار الرد. ربما بالضبط ما يفعله التفضيلات ، ولكن فقط مشفرة. قد تجد أنها مفيدة:

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 الخاص به ، يمكنك البحث بسهولة عن الملف في مجلد "etc /".

يرجى تقديم بعض عينة اسم التطبيق لمزيد من التفاصيل.

آمل أن يساعدك هذا في العثور على طريقك.


0
2017-11-07 10:44



/ etc / بالنسبة لإعدادات على مستوى النظام ، وليس إعدادات المستخدم. - mhall119