¿Cómo recordar la última geometría de la aplicación PyQt?

Estoy usando PyQt5 5.5.1 (64 bits) con Python 3.4.0 (64 bits) en Windows 8.1 64 bits.

Estoy teniendo problemas para restaurar la posición y el tamaño (geometría) de mi aplicación PyQt muy simple.

Aquí está la aplicación de trabajo mínima:

import sys from PyQt5.QtWidgets import QApplication, QWidget class myApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.show() if __name__ == '__main__': app = QApplication(sys.argv) view = myApp() sys.exit(app.exec()) 

Lo que leo en línea es que este es el comportamiento predeterminado y necesitamos usar QSettings para guardar y recuperar la configuración del registro de Windows, que se almacena en

 \\HKEY_CURRENT_USER\Software\{CompanyName}\{AppName}\ 

Estos son algunos de los enlaces que he leído .

Podría haber seguido esos tutoriales pero esos tutoriales / documentos fueron escritos para usuarios de C ++.

C ++ no es mi vaso de cerveza y me resulta imposible convertir esos códigos.


Relacionado:

QSettings (): cómo guardar en el directorio de trabajo actual

Esto debería hacer.

 import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import QSettings, QPoint, QSize class myApp(QWidget): def __init__(self): super(myApp, self).__init__() self.settings = QSettings( 'My company', 'myApp') # Initial window size/pos last saved. Use default values for first time self.resize(self.settings.value("size", QSize(270, 225))) self.move(self.settings.value("pos", QPoint(50, 50))) def closeEvent(self, e): # Write window size and position to config file self.settings.setValue("size", self.size()) self.settings.setValue("pos", self.pos()) e.accept() if __name__ == '__main__': app = QApplication(sys.argv) frame = myApp() frame.show() app.exec_() 

Simplifiqué este ejemplo: QSettings (): cómo guardar en el directorio de trabajo actual

Similar a la respuesta de @ Valentin, porque creo que las configuraciones se están escribiendo en el registro, lo que será un problema para la compatibilidad cruzada. Aquí están los startEvent() y closeEvent() para el trabajo.

 def startEvent() self.settings = QSettings(QSettings.IniFormat,QSettings.SystemScope, '__MyBiz', '__settings') self.settings.setFallbacksEnabled(False) # File only, not registry or or. # setPath() to try to save to current working directory self.settings.setPath(QSettings.IniFormat,QSettings.SystemScope, './__settings.ini') # Initial window size/pos last saved self.resize(self.settings.value("size", QSize(270, 225))) self.move(self.settings.value("pos", QPoint(50, 50))) self.tab = QWidget() def closeEvent(self, e): # Write window size and position to config file self.settings.setValue("size", self.size()) self.settings.setValue("pos", self.pos()) 

startEvent() debe iniciarse al inicio y closeEvent() debe cuidarse antes de salir de la ventana principal.

De hecho, debe utilizar QSetting para esto.

Todos los ejemplos de Qt se han convertido a Python. Se incluyen en los paquetes fuente de PyQt (o PySide), que puede descargar aquí

También puede buscar en línea en el repository de github , particularmente en application.py del ejemplo de mainwindows .

 def readSettings(self): settings = QSettings("Trolltech", "Application Example") pos = settings.value("pos", QPoint(200, 200)) size = settings.value("size", QSize(400, 400)) self.resize(size) self.move(pos) def writeSettings(self): settings = QSettings("Trolltech", "Application Example") settings.setValue("pos", self.pos()) settings.setValue("size", self.size()) 

writeSettings() antes de salir e inicie readSettings() en el inicio.

En mi caso, uso archivos .ini para almacenar configuraciones (idioma, usuario predeterminado, …). El mismo código funciona tanto en Debian como en Windows.

Un ejemplo:

 from PySide.QtCore import QSettings self.settings = QSettings('settings.ini', QSettings.IniFormat) ... self.settings.setValue('size', self.size())