wxpython - salvar itens em listctrl
Pergunta
Minha pergunta é se podemos salvar os itens no ListCtrl, para que toda vez que alguém abre o aplicativo, os itens estão lá e, se o usuário o remover, ele também remove da configuração. Sei que posso usar o wx.config e estou tentando fazer isso, mas não sei como lê -lo de maneira a realizar o que quero.
Então, o que eu gostaria de saber é uma maneira adequada de escrever/ler o wx.config de uma maneira que toda vez que alguém abre o aplicativo, os itens do listctrl estão lá.
Desde já, obrigado.
Solução
Usando o wx.config é muito fácil, basta criar o nome de aprovação do seu aplicativo e adicionar dados, por exemplo,
config = wx.Config("StackOverflowTest")
config.Write("testdata", "yes it works!")
Agora você pode ler a qualquer hora
config = wx.Config("StackOverflowTest")
print config.Read("testdata")
Para salvar a lista de dados CNTRL, sugiro que você primeiro leia todos os dados em uma lista de python e picles que listam na configuração, na próxima vez que leia a configuração, descompacte dados e preencha a lista, a estrutura adiciona funções como Filllist/Savelist para que você possa ter certeza de que a leitura A peça de escrita está próxima e semelhante.
por exemplo, você pode usar este esqueleto
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()