سؤال

سؤالي هو ما إذا كان بإمكاننا حفظ العناصر الموجودة على 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()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top