Programmkonfiguration/Optionen wo speichern?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Redoute
User
Beiträge: 16
Registriert: Donnerstag 5. Juni 2008, 10:21

Freitag 6. Juni 2008, 10:59

Hallo noch mal,

Wo und wie speichere ich die Einstellungen/Optionen eines wxPython-Programme? Also zum Beispiel was so typischerweise unter Extras, Optionen eingestellt wird.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 6. Juni 2008, 11:19

Redoute hat geschrieben:Wo und wie speichere ich die Einstellungen/Optionen eines wxPython-Programme? Also zum Beispiel was so typischerweise unter Extras, Optionen eingestellt wird.
Hallo Redoute!

Suche in der wxPython-Demo nach "StandardPaths"

``GetConfigDir`` gibt dir den Pfad zurück, in den du Einstellungen speichern kannst, die für alle Benutzer des Computers gelten.

``GetUserDataDir`` gibt dir den Pfad zurück, in dem du Programmeinstellungen speichern kannst, die bei "Wandernden Benutzern" für dich, aber nicht nur auf dem lokalen Computer gelten.

``GetUserLocalDataDir`` gibt dir den Pfad zurück, in den du Einstellungen speichern kannst, die nur für den aktuellen Computer und nur für dich gelten. (z.B. Fenstergröße)

Um die korrekten Pfade zurück zu bekommen, musst du der wxPython-Application vorher einen eindeutigen Programmnamen geben.

Zum Speichern der Einstellungen kannst du ``wx.Config`` oder besser ``wx.FileConfig`` verwenden.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Redoute
User
Beiträge: 16
Registriert: Donnerstag 5. Juni 2008, 10:21

Freitag 6. Juni 2008, 11:46

Danke für die schnelle Hilfe! :D
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 6. Juni 2008, 13:35

Hallo Redoute!

Ich wollte mich zwar noch ein wenig damit spielen und es in eine bessere Form bringen, aber ich muss jetzt leider los.

Vielleicht kannst du trotzdem etwas davon herauslesen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import os
import wx
import ConfigParser


app = wx.PySimpleApp()
app.SetAppName("MyTestApp")

sp = wx.StandardPaths_Get()
local_filename = os.path.join(sp.GetUserLocalDataDir(), "local.ini")
global_filename = os.path.join(sp.GetUserDataDir(), "global.ini")

if not os.path.isdir(os.path.dirname(local_filename)):
    os.makedirs(os.path.dirname(local_filename))
#if not os.path.isdir(os.path.dirname(global_filename)):
#    os.makedirs(os.path.dirname(global_filename))

## mit wx.FileConfig
#config = wx.FileConfig(localFilename = local_filename , globalFilename = global_filename)
#config.WriteBool("global/debug", True)
#config.WriteInt("counters/filecounters/logfiles", 100)
#config.WriteInt("counters/filecounters/dbfiles", 200)
#config.Write("strings/teststring", u"""Über den Wolken,
#muss die Freiheit
#wohl Grenzenlos sein""")
#config.Flush()

## mit ConfigParser
INI_ENCODING = "UTF-8"

config = ConfigParser.SafeConfigParser()
config.read([global_filename, local_filename])

config.add_section("global")
config.add_section("counters/filecounters")
config.add_section("strings")

config.set("global", "debug", "True")
config.set("counters/filecounters", "logfiles", "100")
config.set("counters/filecounters", "dbfiles", "200")
config.set("strings", "teststring", u"""Über den Wolken,
muss die Freiheit
wohl Grenzenlos sein""".encode(INI_ENCODING))
config.write(file(local_filename, "w"))
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Redoute
User
Beiträge: 16
Registriert: Donnerstag 5. Juni 2008, 10:21

Montag 9. Juni 2008, 14:26

gerold hat geschrieben:Vielleicht kannst du trotzdem etwas davon herauslesen.
Ja Super! 8)

Vorerst werde ich weder FileConfig noch ConfigParser verwenden, sondern einfach ein Dictionary der Optionen mit cPickle in eine Datei im UserDataDir schreiben. cPickle verwende ich auch schon für die Daten selbst, die vom Programm bearbeitet werden.
Antworten