2017-09-10 8 views
1

저는 PyQt 애플리케이션을 구축 중이며 저는 파이썬으로 초보자입니다. 다른 작업을 수행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를 통해 작업 및 항목의 목록을 만들 :의 내가 정의 된 클래스에서 OBJ 항목을 저장한다고 가정 해 봅시다. 나중에 열 수 있도록이 목록을 어떻게 저장할 수 있습니까? pickle은 QPixmap에서 작동하지 않으며 하나만 저장하려고합니다.

+0

QPixmap 자신을 위해'__setstate__' 및'__getstate__' 메소드를 정의해야합니다. [doc] (https://docs.python.org/2/library/pickle.html#object.__getstate__)을 읽으십시오. – RedEyed

답변

1

QSettings을 사용하여 모든 애플리케이션 데이터를 저장할 수 있습니다. QPixmap, QPoint, QColor 등과 같은 데이터 유형이 자동으로 변환됩니다. 기본적으로 설정은 platform-independant way에 저장되지만 원하는 경우 사용자 정의 위치에 저장할 수도 있습니다.

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는 버전이 기본 값과 값의 예상 유형을 모두 지정할 수 있습니다 : 여기

당신이 당신의 Item 클래스를 읽기/쓰기 수있는 방법입니다.

+0

정확히 내가 무엇을 찾고 있었는지 나는 당신의 제안을 사랑한다. –