Возврат содержимого 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)

Вуаля!

Другие вопросы по тегам