diff options
Diffstat (limited to 'examples/pdfwidgets/pdfviewer/zoomselector.py')
-rw-r--r-- | examples/pdfwidgets/pdfviewer/zoomselector.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/examples/pdfwidgets/pdfviewer/zoomselector.py b/examples/pdfwidgets/pdfviewer/zoomselector.py new file mode 100644 index 000000000..6f9f972e0 --- /dev/null +++ b/examples/pdfwidgets/pdfviewer/zoomselector.py @@ -0,0 +1,59 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +from PySide6.QtPdfWidgets import QPdfView +from PySide6.QtWidgets import QComboBox +from PySide6.QtCore import Signal, Slot + + +class ZoomSelector(QComboBox): + + zoom_mode_changed = Signal(QPdfView.ZoomMode) + zoom_factor_changed = Signal(float) + + def __init__(self, parent): + super().__init__(parent) + self.setEditable(True) + + self.addItem("Fit Width") + self.addItem("Fit Page") + self.addItem("12%") + self.addItem("25%") + self.addItem("33%") + self.addItem("50%") + self.addItem("66%") + self.addItem("75%") + self.addItem("100%") + self.addItem("125%") + self.addItem("150%") + self.addItem("200%") + self.addItem("400%") + + self.currentTextChanged.connect(self.on_current_text_changed) + self.lineEdit().editingFinished.connect(self._editing_finished) + + @Slot(float) + def set_zoom_factor(self, zoomFactor): + percent = int(zoomFactor * 100) + self.setCurrentText(f"{percent}%") + + @Slot() + def reset(self): + self.setCurrentIndex(8) # 100% + + @Slot(str) + def on_current_text_changed(self, text): + if text == "Fit Width": + self.zoom_mode_changed.emit(QPdfView.ZoomMode.FitToWidth) + elif text == "Fit Page": + self.zoom_mode_changed.emit(QPdfView.ZoomMode.FitInView) + elif text.endswith("%"): + factor = 1.0 + zoom_level = int(text[:-1]) + factor = zoom_level / 100.0 + self.zoom_mode_changed.emit(QPdfView.ZoomMode.Custom) + self.zoom_factor_changed.emit(factor) + + @Slot() + def _editing_finished(self): + self.on_current_text_changed(self.lineEdit().text()) |