From d0170982bf1f1f4e5e2f8e50a74923ffb296a4f7 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Wed, 1 May 2024 14:17:15 -0400 Subject: [PATCH] Add `piker.ui.qt` as a `PyQt6` shim module For the future, like if we ever get a `PyQt7` (or wtv else..), add a module which allows changing Qt binding lib imports from one spot for all other `.ui` submodules. In some sense this is like a shoddier, less dynamic version of how `pyqtgraph.Qt.__init__.py` supports multiple libs; it might actually make sense eventually to instead import from their shim layer instead? Included is a draft attempt at exposing a bunch of enums which under custom names: - while the specific grouping of values seem to always stay consistent, the root enum's seem to almost always get moved around in the `PyQtX` module namespace. - changing groupings and/or each top level enum's ns location can more simply be changed/re-orged from one spot. - allows `.ui` consumer code to use a name more relevant to `piker`'s usage of wtv UI component is being configured. --- piker/ui/qt.py | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 piker/ui/qt.py diff --git a/piker/ui/qt.py b/piker/ui/qt.py new file mode 100644 index 00000000..9dbb971c --- /dev/null +++ b/piker/ui/qt.py @@ -0,0 +1,104 @@ +# piker: trading gear for hackers +# Copyright (C) Tyler Goodlet (in stewardship for pikers) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +''' +Qt UI framework version shimming. + +Allow importing sub-pkgs from this module instead of worrying about +major version specifics, any enum moves or component renames. + +Code in `piker.ui.*` should always explicitlyimport directly from +this module like `from piker.ui.qt import ( ..` + +''' +from enum import EnumType + +from PyQt6 import ( + QtCore, + QtGui, + QtWidgets, +) +from PyQt6.QtCore import ( + Qt, + QCoreApplication, + QLineF, + QRectF, + # NOTE: for enums use the `.Type` subattr-space + QEvent, + QPointF, + QSize, + QModelIndex, + QItemSelectionModel, + pyqtBoundSignal, + pyqtRemoveInputHook, +) + +align_flag: EnumType = Qt.AlignmentFlag +txt_flag: EnumType = Qt.TextFlag +keys: EnumType = QEvent.Type +scrollbar_policy: EnumType = Qt.ScrollBarPolicy + +# ^-NOTE-^: handy snippet to discover enums: +# import enum +# [attr for attr_name in dir(QFrame) +# if (attr := getattr(QFrame, attr_name)) +# and isinstance(attr, enum.EnumType)] + +from PyQt6.QtGui import ( + QPainter, + QPainterPath, + QIcon, + QPixmap, + QColor, + QTransform, + QStandardItem, + QStandardItemModel, + QWheelEvent, + QScreen, + QCloseEvent, +) + +from PyQt6.QtWidgets import ( + QMainWindow, + QApplication, + QLabel, + QStatusBar, + QLineEdit, + QHBoxLayout, + QVBoxLayout, + QFormLayout, + QProgressBar, + QSizePolicy, + QStyledItemDelegate, + QStyleOptionViewItem, + QComboBox, + QWidget, + QFrame, + QSplitter, + QTreeView, + QStyle, + QGraphicsItem, + QGraphicsPathItem, + # QGraphicsView, + QStyleOptionGraphicsItem, + QGraphicsScene, + QGraphicsSceneMouseEvent, + QGraphicsProxyWidget, +) + +gs_keys: EnumType = QGraphicsSceneMouseEvent.Type +size_policy: EnumType = QtWidgets.QSizePolicy.Policy +px_cache_mode: EnumType = QGraphicsItem.CacheMode