python - 保存包含pyqt对象的类数据

标签 python pyqt saving-data

我正在构建一个 PyQt 应用程序,而且我对 Python 还很初学者。假设我将 obj 项存储在定义的类中:

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,我想保存一个。

最佳答案

您可以使用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()

PyQt 版本的 QSettings.value() 允许您指定默认值和值的预期类型。

关于python - 保存包含pyqt对象的类数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141091/

相关文章:

python - mechanize.Browser() 在 Windows 下下载损坏的 JPG,在 Linux 下工作正常吗?

python-3.x - 是否可以在不使用类变量的情况下在运行时在实例上创建 pyqtSignals?

java - 我可以将自己的类数据保存到文件中吗?

mysql - CakePHP 3.x - 跨多个表保存关联数据

python - 我打开的以前不存在的文件没有显示。 Python-REPL.it

python - PyCharm 中 Unresolved reference 问题

python - Virtualenv 与 Eclipse(伽利略)

python - 在 Centos 上安装 mysql-python

python - 在 python 中使用 cloudstorage 模块的问题

pyqt - 如何在qtreeview中启用多重选择,直到在pyqt5中按下ctrl键?