Возврат содержимого geometry () в виде списка в PySide - PullRequest
1 голос
/ 05 марта 2012

В настоящее время я пишу приложение на PySide и хочу сохранить размеры окна при выходе.Метод geometry() возвращает что-то вроде PySide.QtCore.QRect(300, 300, 550, 150), но все, что я хочу, это (300, 300, 550, 150).Я мог бы найти способ разобрать его, но я хочу более чистый метод.Есть предложения?

Ответы [ 3 ]

4 голосов
/ 05 марта 2012

Метод getRect возвращает набор значений:

>>> widget.geometry().getRect()
(0, 0, 640, 480)
3 голосов
/ 05 марта 2012

Более чистым способом, без какого-либо анализа, было бы использование 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-битных целых числа.

1 голос
/ 05 августа 2015

Учитывая, что 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)

Вуаля!

...