Pickle de Python. QLabel non sérialisable..

Pickle de Python. QLabel non sérialisable.. - Python - Programmation

Marsh Posté le 18-07-2007 à 10:49:56    

Bonjour à tous et à toutes,
 
J'éssaye de sauvegarder un objet de mon projet python graçe à l'interface pickle. Mais une érreur sort :
 

   raise PicklingError("Can't pickle %r object: %r" %
pickle.PicklingError: Can't pickle 'PlaceObjectUI' object: <Graph.PlaceObjectUI.PlaceObjectUI object at 0x01AC7C90>


 
J'aimerais quelques eclaircissements sur ce problème.
Edit : j'ai remarqué lorsqu'une classe hérite de QLabel, les objets instanciés via cette classe ne sont plus sérialisables. Pourquoi? peut on contourner ce problème.?
Merci
 
 
Voici le code :
 

Code :
  1. def saving(self, _nameFile = None):
  2.         x = copy.copy(self)
  3.         output = open('data.pkl', 'wb')
  4.         pickle.dump(self, output, 1)
  5.         output.close()
  6.        
  7.     def loading(self, _nameFile = None):
  8.         pkl_file = open('data.pkl', 'rb')
  9.         data1 = pickle.load(pkl_file)
  10.         pprint.pprint(data1)
  11.         pkl_file.close()


Message édité par jijiz le 18-07-2007 à 12:16:57
Reply

Marsh Posté le 18-07-2007 à 10:49:56   

Reply

Marsh Posté le 18-07-2007 à 12:56:40    

Un QLabel est probablement lié à plein d'autres machins de Qt, sérialise le label du QLabel et baste [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-07-2007 à 14:16:58    

Voici mes objets :
 
class TreatmentObjectUI(ObjectUI, QtGui.QLabel):
    colorFix = QtCore.Qt.darkGray
    colorMoving = QtCore.Qt.lightGray
    colorFill = QtCore.Qt.darkGray
    """
    Graphical Objects of a treatment
    """
    def __init__(self, _Name, _QPPosition, parent=None):
        ObjectUI.__init__(self, QtCore.QSize(50, 60), _QPPosition, parent)
         
 
Comment sérialiser le "label" ?
 
Merci de m'aider

Reply

Marsh Posté le 18-07-2007 à 14:22:22    

aucune idée, je connais pas qt [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-07-2007 à 14:24:49    

Hmm, ok domage. Car en fait c'est pas comme en java ou tu dis quelles classes tu veux serialiser, dans python tu sérialise un seul objet et si cet objet contient des objets non sérialisables... dtc.

Reply

Marsh Posté le 18-07-2007 à 14:30:38    

jijiz a écrit :

Hmm, ok domage. Car en fait c'est pas comme en java ou tu dis quelles classes tu veux serialiser, dans python tu sérialise un seul objet et si cet objet contient des objets non sérialisables... dtc.


[:pingouino]
 
C'est exactement pareil qu'en java, il y a des objets sérialisables et des objets non sérialisables [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-07-2007 à 14:38:00    

Si quelqu'un peut éclaircir ceci ca ferait plaisir..

Reply

Marsh Posté le 03-09-2007 à 22:10:01    

Tu as essayé avec deepcopy() ? Bien que je doute que ça change quoique ce soit...

Reply

Marsh Posté le 16-11-2007 à 14:23:36    

d'après la doc PyQt
 
http://www.riverbankcomputing.com/ [...] r-pickling
 
les classes sur lesquelles on peu utiliser pickle sont les limitées à celles-ci:
        * QByteArray
        * QChar
        * QColor
        * QDate
        * QDateTime
        * QKeySequence
        * QLatin1Char
        * QLatin1String
        * QLine
        * QLineF
        * QMatrix
        * QPoint
        * QPointF
        * QPolygon
        * QRect
        * QRectF
        * QSize
        * QSizeF
        * QString
        * QTime
 
je suppose que tu peux faire un truc du genre: pickle.dump(monQLabel.text(), output, 1) devrait sauver ce que continet le QLabel, et c'est peut-être suffisant dans ton cas ...
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed