如何在Python 3中腌制QPixmap对象字典

问题描述 投票:0回答:1

我想在Python 3中腌制QPixmap对象字典

例如,

ImageQpixmapDict = {}
ImageQpixmapDict['XXX'] = QPixmap() 

在这种情况下,我想腌制ImageQpixmapDict变量

like

pickle.dump(ImageQpixmapDict, 'filePath')

我试图通过使用QSettings来腌制QPixmap对象,但是它不起作用。

但是,您知道,无法腌制QPixmap对象。因此,我该如何解决这个问题。

python python-3.x pyqt pyqt5 qpixmap
1个回答
0
投票
仅某些Qt类是可选取的(请参见the docs),并且其中没有QPixmap,因此解决方案是创建一个实现该逻辑的派生类:

import pickle from PyQt5 import QtCore, QtGui class Pickable_QPixmap(QtGui.QPixmap): def __reduce__(self): return type(self), (), self.__getstate__() def __getstate__(self): ba = QtCore.QByteArray() stream = QtCore.QDataStream(ba, QtCore.QIODevice.WriteOnly) stream << self return ba def __setstate__(self, ba): stream = QtCore.QDataStream(ba, QtCore.QIODevice.ReadOnly) stream >> self if __name__ == "__main__": import sys app = QtGui.QGuiApplication(sys.argv) # create QPixmap pixmap = QtGui.QPixmap(100, 100) pixmap.fill(QtGui.QColor("red")) with open("data.pickle", "wb") as f: image_dict = dict() image_dict["XXX"] = Pickable_QPixmap( pixmap ) # convert QPixmap to Pickable_QPixmap pickle.dump(image_dict, f) with open("data.pickle", "rb") as f: image_dict = pickle.load(f) pixmap = image_dict["XXX"] qpixmap = QtGui.QPixmap(pixmap) # convert Pickable_QPixmap to QPixmap assert qpixmap.size() == pixmap.size() == QtCore.QSize(100, 100) assert qpixmap.toImage() == pixmap.toImage()

© www.soinside.com 2019 - 2024. All rights reserved.