wxPython - 在ListCtrl中保存项目

时间:2010-04-18 14:47:11

标签: python wxpython save items listctrl

我的问题是,如果我们可以将项目保存在ListCtrl上,那么每当有人打开应用程序时,项目就在那里,如果用户将其删除,它也会从配置中删除。 我知道我可以使用wx.Config并且我正在尝试使用它,但我不知道如何阅读它以实现我想要的方式。

所以我想知道的是以一种方式编写/读取wx.Config的正确方法,每当有人打开应用程序时,ListCtrl中的项目就在那里。

提前致谢。

1 个答案:

答案 0 :(得分:3)

使用wx.Config非常简单,只需创建应用程序的配置传递名称并添加数据即可。

config = wx.Config("StackOverflowTest")
config.Write("testdata", "yes it works!")

现在你可以随时阅读

config = wx.Config("StackOverflowTest")
print config.Read("testdata")

对于保存列表cntrl数据,我建议您首先读取python列表中的所有数据并将该列表pickle到config中,下次读取config,unpickle数据并填充列表,结构明智地添加fillList / saveList等函数,这样你就可以了确保阅读写作部分在附近且类似。

e.g。你可以使用这个骨架

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()