Python:Pickle和Qt(PyQT)

alp*_*ric 5 python qt pyqt pickle

找到为什么将Qt对象的实例作为MyClass()的属性导致两页崩溃日志会非常有趣.以及如何避免它:

import sys, os, pickle
from PyQt4 import QtGui

class MyClass(object):
    def __init__(self):
        self.myQtWidget=QtGui.QPushButton() 
        pass 

app = QtGui.QApplication(sys.argv)
myInstance=MyClass()
pickle.dump( myInstance, open( "save.mydata", "wb" ) )
Run Code Online (Sandbox Code Playgroud)

ekh*_*oro 6

来自文档:

可以腌制以下PyQt4类.

QByteArray
QChar
QColor
QDate
QDateTime
QKeySequence
QLatin1Char
QLatin1String
QLine
QLineF
QMatrix
QPoint
QPointF
QPolygon
QRect
QRectF
QSize
QSizeF
QString
QTime
Run Code Online (Sandbox Code Playgroud)

也可以对所有命名的枚举(例如QtCore.Qt.Key)进行pickle.

  • @Sputnix.您可以通过为您的类定义`__getstate__`和`__setstate__`来控制酸洗的完成方式.[python docs for these methods](https://docs.python.org/2/library/pickle.html#object.__getstate__)非常清楚地解释了你需要做什么(基本上,返回实例的副本`__dict__ `没有`__getstate__`中的不可解决的位,并恢复`__setstate__`中的缺失位. (2认同)