Wxpython - حفظ العناصر في ListCtrl
سؤال
سؤالي هو ما إذا كان بإمكاننا حفظ العناصر الموجودة على 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()