2014-04-06 24 views
5

Bir MyClass() 'ın özniteliği olarak neden bir iki sayfalık kilitlenme günlüğüne neden olarak Qt nesnesinin bir örneğine sahip olduğunu bulmak oldukça eğlenceli olur. Ve bunu önlemek için nasıl:Python: Turşu ve Qt (PyQT)

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")) 
+1

Bir QWidget örneğini neden seçmeniz gerektiğini öğrenmek isterim. Bana xy probleminin bir örneği gibi geliyor (bkz. Http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Eğer bir çözüme ihtiyaç duyarsanız, o zaman ne dekapaj çözeltisi ile çözmeye çalıştığınızı açıklayan yeni bir soru sormaya değer olabilir (çünkü aşağıda görebileceğiniz gibi, dekapaj çalışmaz) –

+1

@three_pineapples. OP'in gerçekten widget'ları değil, sınıf örneğinin içerdiği diğer şeyleri seçmesi gerekmedikçe, değerlendirmenizde karar kılındı. Eğer öyleyse, yorumum belows bir çözüm sunuyor. Ama yine de, bu muhtemelen kusurlu bir tasarımın ne olduğu için hakir bir çözüm gibi görünüyor. – ekhumoro

cevap

6

docs Gönderen:

aşağıdaki PyQt4 sınıfları salamura olabilir. Ayrıca, tüm adlandırılmış enumlar (örnek olarak QtCore.Qt.Key) de seçilebilir.

+0

Bu nedenle, sınıf örnekleri, attrs olarak tanımlanan widget'ları seçemiyoruz? Etrafta yok mu? – alphanumeric

+2

@Sputnix. Sınıflandırma için '__getstate__' ve' __setstate__' tanımlayarak dekapajın nasıl yapıldığını kontrol edebilirsiniz. [Bu yöntemler için python belgeleri] (https://docs.python.org/2/library/pickle.html#object.__getstate__) yapmanız gerekenleri oldukça açık bir şekilde açıklar (örneğin, __dict__ örneğinin bir kopyasını döndürür) '__getstate__' içinde okunaksız bitler olmadan ve' __setstate__' içinde eksik bitleri geri yükleyin. – ekhumoro

+0

Teşekkürler Ekhumoro! – alphanumeric