diff --git a/piker/ui/_window.py b/piker/ui/_window.py index a15ecd24..f7b9df91 100644 --- a/piker/ui/_window.py +++ b/piker/ui/_window.py @@ -37,6 +37,7 @@ from piker.ui.qt import ( QStatusBar, QScreen, QCloseEvent, + QSettings, ) from ..log import get_logger from ._style import _font_small, hcolor @@ -181,6 +182,13 @@ class MainWindow(QMainWindow): self._status_label: QLabel = None self._size: tuple[int, int] | None = None + # restore window geometry from previous session + settings = QSettings('pikers', 'piker') + geometry = settings.value('windowGeometry') + if geometry is not None: + self.restoreGeometry(geometry) + log.debug('Restored window geometry from previous session') + @property def mode_label(self) -> QLabel: @@ -217,6 +225,11 @@ class MainWindow(QMainWindow): '''Cancel the root actor asap. ''' + # save window geometry for next session + settings = QSettings('pikers', 'piker') + settings.setValue('windowGeometry', self.saveGeometry()) + log.debug('Saved window geometry for next session') + # raising KBI seems to get intercepted by by Qt so just use the system. os.kill(os.getpid(), signal.SIGINT) diff --git a/piker/ui/qt.py b/piker/ui/qt.py index 9dbb971c..3dfaedf0 100644 --- a/piker/ui/qt.py +++ b/piker/ui/qt.py @@ -44,6 +44,7 @@ from PyQt6.QtCore import ( QItemSelectionModel, pyqtBoundSignal, pyqtRemoveInputHook, + QSettings, ) align_flag: EnumType = Qt.AlignmentFlag