我的问题是我们是否可以将项目保存在 ListCtrl 上,这样每次有人打开应用程序时,项目就在那里,如果用户删除它,它也会从配置中删除。我知道我可以使用 wx.Config 并且我正在尝试使用它来完成,但我不知道如何以某种方式阅读它来完成我想要的。
所以我想知道的是一种正确的方式来写入/读取 wx.Config,每次有人打开应用程序时,ListCtrl 中的项目都在那里。
提前致谢。
使用 wx.Config 非常简单,只需创建应用程序的配置名称并添加数据,例如
config = wx.Config("StackOverflowTest")
config.Write("testdata", "yes it works!")
现在你可以随时阅读
config = wx.Config("StackOverflowTest")
print config.Read("testdata")
为了保存列表cntrl数据,我建议您首先读取python列表中的所有数据并将该列表腌制到配置中,下次读取配置,取消腌制数据并填充列表,结构明智地添加诸如fillList / saveList之类的功能,这样您就可以确保阅读写作部分在附近并且相似。
例如你可以使用这个骨架
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()