diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-03-24 18:26:06 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-03-25 12:31:43 +0100 |
commit | 9afc6a8ed1a717c1f153e190ba5d6237451c42a2 (patch) | |
tree | 213e60dd56f6636775a6d66b2b4147fdd764ddc7 /examples/widgets/mainwindows/mdi/mdi.py | |
parent | 2f18ab9c93d4fae8d8d7e4d84bd9cd2e7fd22c3d (diff) |
Brush up the main window examples
- Use snake case in dockwidgets and application.
- Fix imports in application to be consistent with others.
- Fix the code saving/restoring geometries in mdi/application
to use QWidget.save/restoreGeometry() instead of saving pos/size
since that handles multiscreen setups correctly. Use 'QtProject'
as settings category.
- Use theme icons in application as in mdi.
- Configure QFileDialog for saving HTML in dockwidgets.
- Replace QSignalMapper by partial functions in mdi.
- Fix one oversight of 4f2f9e2dc511ddcf802e342361e89edbf03a4a88
in mdi.
- Add command line arguments
Task-number: PYSIDE-1112
Change-Id: I7eca08a675876c74c6e754b946a2e63df4da3684
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'examples/widgets/mainwindows/mdi/mdi.py')
-rw-r--r-- | examples/widgets/mainwindows/mdi/mdi.py | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/examples/widgets/mainwindows/mdi/mdi.py b/examples/widgets/mainwindows/mdi/mdi.py index 1e68e91e2..b10ecbef3 100644 --- a/examples/widgets/mainwindows/mdi/mdi.py +++ b/examples/widgets/mainwindows/mdi/mdi.py @@ -2,7 +2,7 @@ ############################################################################# ## ## Copyright (C) 2013 Riverbank Computing Limited. -## Copyright (C) 2016 The Qt Company Ltd. +## Copyright (C) 2021 The Qt Company Ltd. ## Contact: http://www.qt.io/licensing/ ## ## This file is part of the Qt for Python examples of the Qt Toolkit. @@ -40,9 +40,13 @@ ## ############################################################################# -"""PySide6 port of the widgets/draganddrop/draggabletext example from Qt v5.x, originating from PyQt""" +"""PySide6 port of the widgets/mainwindows/mdi example from Qt v5.x, originating from PyQt""" -from PySide6.QtCore import (QFile, QFileInfo, QPoint, QSettings, QSignalMapper, +from argparse import ArgumentParser, RawTextHelpFormatter +from functools import partial +import sys + +from PySide6.QtCore import (QByteArray, QFile, QFileInfo, QPoint, QSettings, QSaveFile, QSize, QTextStream, Qt) from PySide6.QtGui import QAction, QIcon, QKeySequence from PySide6.QtWidgets import (QApplication, QFileDialog, QMainWindow, @@ -173,8 +177,6 @@ class MainWindow(QMainWindow): self.setCentralWidget(self._mdi_area) self._mdi_area.subWindowActivated.connect(self.update_menus) - self._window_mapper = QSignalMapper(self) - self._window_mapper.mappedObject.connect(self.set_active_sub_window) self.create_actions() self.create_menus() @@ -200,19 +202,21 @@ class MainWindow(QMainWindow): child.show() def open(self): - fileName, _ = QFileDialog.getOpenFileName(self) - if fileName: - existing = self.find_mdi_child(fileName) + file_name, _ = QFileDialog.getOpenFileName(self) + if file_name: + existing = self.find_mdi_child(file_name) if existing: self._mdi_area.setActiveSubWindow(existing) - return - - child = self.create_mdi_child() - if child.load_file(fileName): - self.statusBar().showMessage("File loaded", 2000) - child.show() else: - child.close() + self.load(file_name) + + def load(self, file_name): + child = self.create_mdi_child() + if child.load_file(file_name): + self.statusBar().showMessage("File loaded", 2000) + child.show() + else: + child.close() def save(self): if self.active_mdi_child() and self.active_mdi_child().save(): @@ -283,8 +287,8 @@ class MainWindow(QMainWindow): action = self._window_menu.addAction(text) action.setCheckable(True) action.setChecked(child is self.active_mdi_child()) - action.triggered.connect(self._window_mapper.map) - self._window_mapper.setMapping(action, window) + slot_func = partial(self.set_active_sub_window, window=window) + action.triggered.connect(slot_func) def create_mdi_child(self): child = MdiChild() @@ -415,16 +419,14 @@ class MainWindow(QMainWindow): self.statusBar().showMessage("Ready") def read_settings(self): - settings = QSettings('Trolltech', 'MDI Example') - pos = settings.value('pos', QPoint(200, 200)) - size = settings.value('size', QSize(400, 400)) - self.move(pos) - self.resize(size) + settings = QSettings('QtProject', 'MDI Example') + geometry = settings.value('geometry', QByteArray) + if geometry.size(): + self.restoreGeometry(geometry) def write_settings(self): - settings = QSettings('Trolltech', 'MDI Example') - settings.setValue('pos', self.pos()) - settings.setValue('size', self.size()) + settings = QSettings('QtProject', 'MDI Example') + settings.setValue('geometry', self.saveGeometry()) def active_mdi_child(self): active_sub_window = self._mdi_area.activeSubWindow() @@ -436,7 +438,7 @@ class MainWindow(QMainWindow): canonical_file_path = QFileInfo(fileName).canonicalFilePath() for window in self._mdi_area.subWindowList(): - if window.widget().currentFile() == canonical_file_path: + if window.widget().current_file() == canonical_file_path: return window return None @@ -452,10 +454,15 @@ class MainWindow(QMainWindow): if __name__ == '__main__': - - import sys + argument_parser = ArgumentParser(description='MDI Example', + formatter_class=RawTextHelpFormatter) + argument_parser.add_argument("files", help="Files", + nargs='*', type=str) + options = argument_parser.parse_args() app = QApplication(sys.argv) main_win = MainWindow() + for f in options.files: + main_win.load(f) main_win.show() sys.exit(app.exec_()) |