diff options
Diffstat (limited to 'examples/widgets/imageviewer/imageviewer.py')
-rw-r--r-- | examples/widgets/imageviewer/imageviewer.py | 85 |
1 files changed, 25 insertions, 60 deletions
diff --git a/examples/widgets/imageviewer/imageviewer.py b/examples/widgets/imageviewer/imageviewer.py index b18c365af..ebf420f92 100644 --- a/examples/widgets/imageviewer/imageviewer.py +++ b/examples/widgets/imageviewer/imageviewer.py @@ -1,51 +1,15 @@ -############################################################################# -## -## 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. -## -## $QT_BEGIN_LICENSE:BSD$ -## You may use this file under the terms of the BSD license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of The Qt Company Ltd nor the names of its -## contributors may be used to endorse or promote products derived -## from this software without specific prior written permission. -## -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -## $QT_END_LICENSE$ -## -############################################################################# +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +from __future__ import annotations from PySide6.QtPrintSupport import QPrintDialog, QPrinter from PySide6.QtWidgets import (QApplication, QDialog, QFileDialog, QLabel, - QMainWindow, QMenuBar, QMessageBox, QScrollArea, - QScrollBar, QSizePolicy, QStatusBar) -from PySide6.QtGui import (QAction, QClipboard, QColorSpace, QGuiApplication, - QImage, QImageReader, QImageWriter, QKeySequence, - QPalette, QPainter, QPixmap, QScreen) -from PySide6.QtCore import QDir, QMimeData, QStandardPaths, Qt, Slot + QMainWindow, QMessageBox, QScrollArea, + QSizePolicy) +from PySide6.QtGui import (QColorSpace, QGuiApplication, + QImageReader, QImageWriter, QKeySequence, + QPalette, QPainter, QPixmap) +from PySide6.QtCore import QDir, QStandardPaths, Qt, Slot ABOUT = """<p>The <b>Image Viewer</b> example shows how to combine QLabel @@ -65,13 +29,13 @@ shows how to use QPainter to print an image.</p> class ImageViewer(QMainWindow): def __init__(self, parent=None): - super(ImageViewer, self).__init__(parent) + super().__init__(parent) self._scale_factor = 1.0 self._first_file_dialog = True self._image_label = QLabel() self._image_label.setBackgroundRole(QPalette.Base) self._image_label.setSizePolicy(QSizePolicy.Ignored, - QSizePolicy.Ignored) + QSizePolicy.Ignored) self._image_label.setScaledContents(True) self._scroll_area = QScrollArea() @@ -100,7 +64,9 @@ class ImageViewer(QMainWindow): w = self._image.width() h = self._image.height() d = self._image.depth() - message = f'Opened "{native_filename}", {w}x{h}, Depth: {d}' + color_space = self._image.colorSpace() + description = color_space.description() if color_space.isValid() else 'unknown' + message = f'Opened "{native_filename}", {w}x{h}, Depth: {d} ({description})' self.statusBar().showMessage(message) return True @@ -136,7 +102,7 @@ class ImageViewer(QMainWindow): def _open(self): dialog = QFileDialog(self, "Open File") self._initialize_image_filedialog(dialog, QFileDialog.AcceptOpen) - while (dialog.exec_() == QDialog.Accepted + while (dialog.exec() == QDialog.Accepted and not self.load_file(dialog.selectedFiles()[0])): pass @@ -144,7 +110,7 @@ class ImageViewer(QMainWindow): def _save_as(self): dialog = QFileDialog(self, "Save File As") self._initialize_image_filedialog(dialog, QFileDialog.AcceptSave) - while (dialog.exec_() == QDialog.Accepted + while (dialog.exec() == QDialog.Accepted and not self._save_file(dialog.selectedFiles()[0])): pass @@ -152,16 +118,15 @@ class ImageViewer(QMainWindow): def _print_(self): printer = QPrinter() dialog = QPrintDialog(printer, self) - if dialog.exec_() == QDialog.Accepted: - painter = QPainter(printer) - pixmap = self._image_label.pixmap() - rect = painter.viewport() - size = pixmap.size() - size.scale(rect.size(), Qt.KeepAspectRatio) - painter.setViewport(rect.x(), rect.y(), size.width(), size.height()) - painter.setWindow(pixmap.rect()) - painter.drawPixmap(0, 0, pixmap) - painter.end() + if dialog.exec() == QDialog.Accepted: + with QPainter(printer) as painter: + pixmap = self._image_label.pixmap() + rect = painter.viewport() + size = pixmap.size() + size.scale(rect.size(), Qt.KeepAspectRatio) + painter.setViewport(rect.x(), rect.y(), size.width(), size.height()) + painter.setWindow(pixmap.rect()) + painter.drawPixmap(0, 0, pixmap) @Slot() def _copy(self): |