Seite 1 von 1

Programmkonfiguration/Optionen wo speichern?

Verfasst: Freitag 6. Juni 2008, 10:59
von Redoute
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.

Re: Programmkonfiguration/Optionen wo speichern?

Verfasst: Freitag 6. Juni 2008, 11:19
von gerold
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
:-)

Verfasst: Freitag 6. Juni 2008, 11:46
von Redoute
Danke für die schnelle Hilfe! :D

Verfasst: Freitag 6. Juni 2008, 13:35
von gerold
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
:-)

Verfasst: Montag 9. Juni 2008, 14:26
von Redoute
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.