wxPython - сохраняет элементы в ListCtrl - PullRequest
2 голосов
/ 18 апреля 2010

Мой вопрос: можем ли мы сохранить элементы в ListCtrl, чтобы каждый раз, когда кто-то открывал приложение, элементы были там, и если пользователь удаляет его, оно также удаляется из конфигурации. Я знаю, что могу использовать wx.Config, и я пытаюсь это сделать, но я не знаю, как читать его так, как я хочу.

Итак, я хотел бы знать, как правильно написать / прочитать wx.Config таким образом, чтобы каждый раз, когда кто-то открывал приложение, элементы из ListCtrl были там.

Заранее спасибо.

1 Ответ

3 голосов
/ 19 апреля 2010

Использовать 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()
...