2017-09-10 4 views
1

私はPyQtアプリケーションを構築しています。私はPythonでかなり初心者です。pyqtオブジェクトを含むクラスデータを保存する

class Item (self): 
    def __init__(self, item_nbr, crop_pixmap, originepoint, designation): 
     self.item_nbr = item_nbr   # integer 
     self.crop_pixmap = crop_pixmap  # QPixmap 
     self.origin_point = originpoint  # QPoint 
     self.designation = designation  # str 

次に、私はGUIを介して他の操作を実行し、アイテムのリストを作成します。このリストを保存して後で開くことができますか? pickleはQPixmapでは動作しません。シングルを保存したいのですが。

+0

QPixmap独自の '__setstate__'メソッドと' __getstate__'メソッドを定義する必要があります。 [doc](https://docs.python.org/2/library/pickle.html#object.__getstate__)を読んでください。 – RedEyed

答えて

1

QSettingsを使用すると、すべてのアプリケーションデータを保存できます。 QPixmapQPointQColorなどのデータタイプを自動的に変換します。デフォルトでは、設定はplatform-independant wayに保存されますが、必要に応じてカスタムの場所に保存することもできます。ここで

はあなたItemクラスを書く/読むことができる方法です:

def settings(self): 
    # use a custom location 
    return QtCore.QSettings('app.conf', QtCore.QSettings.IniFormat) 

def readSettings(self): 
    self.items = [] 
    settings = self.settings() 
    for index in range(settings.beginReadArray('items')): 
     settings.setArrayIndex(index) 
     self.items.append(Item(
      settings.value('number', -1, int), 
      settings.value('pixmap', None, QtGui.QPixmap), 
      settings.value('point', None, QtCore.QPoint), 
      settings.value('designation', '', str), 
      )) 

def writeSettings(self): 
    settings = self.settings() 
    settings.beginWriteArray('items') 
    for index, item in enumerate(self.items): 
     settings.setArrayIndex(index) 
     settings.setValue('number', item.item_nbr) 
     settings.setValue('pixmap', item.crop_pixmap) 
     settings.setValue('point', item.origin_point) 
     settings.setValue('designation', item.designation) 
    settings.endArray() 

QSettings.value()のPyQtはバージョンがデフォルト値と値の予想されるタイプの両方を指定することができます。

+0

完璧に私が探していたものあなたの提案が大好き –

関連する問題