wxPython - Enregistrer les objets dans ListCtrl
Question
Ma question est de savoir si nous pouvons sauver les articles sur ListCtrl si chaque fois que quelqu'un ouvre l'application, les éléments sont là et si l'utilisateur supprime, il supprime également de la configuration. Je sais que je peux utiliser wx.Config et je suis en train d'accomplir à l'aide, mais je ne sais pas comment le lire d'une façon d'accomplir ce que je veux.
Alors, ce que je voudrais savoir est une bonne façon d'écrire / lire la wx.Config de manière à chaque fois que quelqu'un ouvre l'application, les articles de ListCtrl sont là.
Merci à l'avance.
La solution
Utilisation wx.Config est très facile, il suffit de créer le nom qui passe config de votre application et ajouter des données par exemple.
config = wx.Config("StackOverflowTest")
config.Write("testdata", "yes it works!")
Maintenant, vous pouvez le lire à tout moment
config = wx.Config("StackOverflowTest")
print config.Read("testdata")
Pour la sauvegarde des données de cntrl liste Je vous suggère de lire d'abord toutes les données dans une liste python et Pickle cette liste dans config, config lire la prochaine fois, les données unpickle et la liste Populate, la structure ajouter sage des fonctions comme FillList / SaveList afin que vous puissiez faire partie de lecture d'écriture que sont à proximité et similaires.
par exemple. vous pouvez utiliser ce squelette
import wx
import cPickle
class MyListCtrl(wx.ListCtrl):
def __init__(self, *args, **kwargs):
wx.ListCtrl.__init__(self, *args, **kwargs)
self.config = wx.Config("MykoolApp")
self.fillist()
def filllist(self):
# load rows and check for error too, if no data
data = self.config.Read("list_cntrl_data")
rowList = cPickle.loads(data)
for row in rowList:
# add this row to list cntrl
pass
def savelist(self):
rows = []
for row in self:
# add data to rows
pass
data = cPickle.dumps(rows)
self.config.Write("list_cntrl_data", data)
def onchange(self):
"""
on changes to list e.g. add delete call save list
"""
self.savelist()