Возврат содержимого geometry() в виде списка в PySide
В настоящее время я пишу приложение на PySide и хочу, чтобы оно сохраняло размеры окна при выходе. geometry()
метод возвращает что-то вроде PySide.QtCore.QRect(300, 300, 550, 150)
но все что я хочу это (300, 300, 550, 150)
, Я мог бы найти способ разобрать его, но я хочу более чистый метод. Какие-либо предложения?
3 ответа
Более чистым способом, без разбора, было бы использовать QSettings
хранить и извлекать QRect
возвращается геометрией в / из собственного хранилища настроек приложения (реестр Windows, файл.ini, файл.plist...).
Например:
settings = QSettings(...);
settings.setValue("lastGeometry", self.geometry())
# and to retrieve the value
lastGeometry = settings.value("lastGeometry")
if lastGeometry.isValid():
self.setGeometry(lastGeometry)
Вы также можете двоично сериализовать или десериализовать QRect
с QDataStream
в 16-байтовый массив, представляющий 4 32-битные целые числа.
Метод getRect возвращает кортеж значений:
>>> widget.geometry().getRect()
(0, 0, 640, 480)
Учитывая, что OP принял один из @alexisdm, это может быть интересно:
Я искал в использовании restoreGeometry()
так как он обрабатывает восстановление за пределами окон экрана и за пределами верхней границы. НО: ему нужен QByteArray, и я могу сохранять только простые данные Python в моем случае. Поэтому я попытался превратить массив байтов в строку:
encoded = str(self.saveGeometry().toPercentEncoding())
print('encoded: %s' % encoded)
>>> encoded: %01%D9%D0%CB%00%01%00%00%FF%F...
geometry = QtCore.QByteArray().fromPercentEncoding(encoded)
self.restoreGeometry(geometry)
Вуаля!