Форум сайта python.su
Добрый день!
Пытаюсь реализовать сериализацию и десериализацию виджета PyQt с помощью модуля pickle. Добавил спец. методы для сериализации.
На данный момент такой код:
import pickle, sys from PyQt4 import QtGui class MyWindow(QtGui.QWidget): """Окно""" def __new__(cls, args=None): """Метод new""" obj = super(MyWindow, cls).__new__(cls) return obj def __init__(self): """Метод init""" QtGui.QWidget.__init__(self) self.setWindowTitle("Тест") def __getstate__(self): return self.windowTitle() def __setstate__(self, value): self.setWindowTitle(value) def __getinitargs__(self): flag = True return (flag, ) #Создаем экземпляр приложение app = QtGui.QApplication(sys.argv) #Создаем эксземпляр класса MainWindow obj = MyWindow() #Сохрание with open(r'TestFile.txt', 'wb') as f: pickle.dump(obj, f, 3) #востановление with open(r'TestFile.txt', 'rb') as f: obj = pickle.load(f) #Показываем окно obj.show() #Запускаем цикл обработки событий sys.exit(app.exec_())
Офлайн
Решил данную проблему. Надо просто вызвать __init__ из __setstate__.
Привожу код, может кому пригодится:
#Программа тестирования сохранения в файл конструкций PyQt import pickle, sys from PyQt4 import QtGui class MyWindow(QtGui.QWidget): """Окно""" def __init__(self): """Метод init""" QtGui.QWidget.__init__(self) self.setWindowTitle("Тест") def __getstate__(self): return self.windowTitle() def __setstate__(self, value): self.__init__() self.setWindowTitle(value) #Создаем экземпляр приложение app = QtGui.QApplication(sys.argv) #Создаем эксземпляр класса MainWindow obj = MyWindow() #Сохрание with open(r'TestFile.txt', 'wb') as f: pickle.dump(obj, f, 3) #востановление with open(r'TestFile.txt', 'rb') as f: obj = pickle.load(f) #Показываем окно obj.show() #Запускаем цикл обработки событий sys.exit(app.exec_())
Офлайн