सवाल एप्लिकेशन वरीयताओं और डेटा भंडारण


मैं कुछ उबंटू अनुप्रयोग बनाने की सोच रहा हूं, लेकिन अच्छे रिसोरेस ढूंढना मुश्किल है।

मैं जल्दी टूलकिट का उपयोग कर रहा हूं, लेकिन वास्तव में कुछ और अंतर्दृष्टि पसंद करूंगा। लिनक्स / उबंटू में सामान्य रूप से एप्लिकेशन वरीयताओं और सेटिंग्स को कैसे संग्रहीत किया जाता है।

क्या यह एक 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 schemas का उपयोग करें। एक डिफ़ॉल्ट स्कीमा बनाया गया है data/glib-2.0/schemas। यह एक एक्सएमएल फाइल है जिसे बुलाया जाता है 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>

कुंजी पूर्णांक हो सकती है (प्रकार = "i"), बूलियन (प्रकार = "बी"), या फ्लोट (प्रकार = "डी")। केवल कम केस का प्रयोग करें और - मुख्य नामों में।

सेटिंग्स तक पहुंचने और उन्हें विजेट्स से बांधने के लिए, आप उन्हें निम्नानुसार प्राप्त कर सकते हैं (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)।

यदि आप पायथन का उपयोग कर रहे हैं, तो मैं अनुशंसा करता हूं ConfigParser लाइब्रेरी जो संरचित कॉन्फ़िगर फ़ाइल फ़ाइल को पढ़ने और लिखना आसान बनाता है।


2
2017-11-08 14:48





मेरे पास लिनक्स के साथ अधिक काम का अनुभव नहीं है। लेकिन मेरे आवेदन पर काम करते समय मुझे इसी तरह का मुद्दा सामना करना पड़ा।

लिनक्स में, प्रत्येक एप्लिकेशन एक फ़ाइल उत्पन्न करता है जिसमें सभी सेटिंग्स शामिल होती हैं। यदि इसका लिनक्स स्वयं का एप्लीकेशन है, तो आप फ़ाइल को "/ etc /" फ़ोल्डर में आसानी से खोज सकते हैं।

अधिक जानकारी के लिए कृपया कुछ नमूना आवेदन नाम प्रदान करें।

उम्मीद है कि यह आपको अपना रास्ता खोजने में मदद कर सकता है।


0
2017-11-07 10:44



/ etc / सिस्टम-व्यापी सेटिंग्स के लिए है, उपयोगकर्ता सेटिंग्स नहीं। - mhall119