Skip to content

Commit c41eb72

Browse files
committed
improve qt imports
1 parent 91eff48 commit c41eb72

25 files changed

+255
-220
lines changed

modules/_pyqt.py

-180
This file was deleted.

modules/_qt_constants.py

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
from modules._qt_ver import (
2+
USE_QT6,
3+
USE_PYQT6,
4+
USE_PYQT5,
5+
USE_PYSIDE6,
6+
QtCore,
7+
QtGui,
8+
)
9+
10+
11+
if USE_PYSIDE6:
12+
Signal = QtCore.Signal
13+
QtCore.QT_VERSION_STR = QtCore.__version__
14+
Slot = QtCore.Slot
15+
else:
16+
Signal = QtCore.pyqtSignal
17+
Slot = QtCore.pyqtSlot
18+
19+
# import qasync once pyQt is imported so the correct version is used (it starts with PyQt5 then tries PyQt6)
20+
import qasync # noqa
21+
22+
# make sure the version is correct in case the underlying code for qasync changed
23+
if USE_PYSIDE6 and qasync.QtModuleName != "PySide6":
24+
raise AssertionError(
25+
f"Wrong version of PySide6 used for qasync: {qasync.QtModuleName}"
26+
)
27+
elif USE_PYQT6 and qasync.QtModuleName != "PyQt6":
28+
raise AssertionError(
29+
f"Wrong version of PyQt6 used for qasync: {qasync.QtModuleName}"
30+
)
31+
elif USE_PYQT5 and qasync.QtModuleName != "PyQt5":
32+
raise AssertionError(
33+
f"Wrong version of PyQt5 used for qasync: {qasync.QtModuleName}"
34+
)
35+
36+
37+
# key
38+
QT_KEY_BACKTAB = QtCore.Qt.Key.Key_Backtab if USE_QT6 else QtCore.Qt.Key_Backtab
39+
QT_KEY_TAB = QtCore.Qt.Key.Key_Tab if USE_QT6 else QtCore.Qt.Key_Tab
40+
QT_KEY_SPACE = QtCore.Qt.Key.Key_Space if USE_QT6 else QtCore.Qt.Key_Space
41+
QT_KEY_PRESS = QtCore.QEvent.Type.KeyPress if USE_QT6 else QtCore.QEvent.KeyPress
42+
QT_KEY_RELEASE = (
43+
QtCore.QEvent.Type.KeyRelease if USE_QT6 else QtCore.QEvent.KeyRelease
44+
)
45+
QT_NO_MODIFIER = (
46+
QtCore.Qt.KeyboardModifier.NoModifier if USE_QT6 else QtCore.Qt.NoModifier
47+
)
48+
49+
#align
50+
QT_ALIGN_LEFT = QtCore.Qt.AlignmentFlag.AlignLeft if USE_QT6 else QtCore.Qt.AlignLeft
51+
QT_ALIGN_RIGHT = QtCore.Qt.AlignmentFlag.AlignRight if USE_QT6 else QtCore.Qt.AlignRight
52+
QT_ALIGN_CENTER = (
53+
QtCore.Qt.AlignmentFlag.AlignCenter if USE_QT6 else QtCore.Qt.AlignCenter
54+
)
55+
QT_ALIGN_H_CENTER = (
56+
QtCore.Qt.AlignmentFlag.AlignHCenter if USE_QT6 else QtCore.Qt.AlignHCenter
57+
)
58+
QT_ALIGN_V_CENTER = (
59+
QtCore.Qt.AlignmentFlag.AlignVCenter if USE_QT6 else QtCore.Qt.AlignVCenter
60+
)
61+
QT_ALIGN_RIGHT = (
62+
QtCore.Qt.AlignmentFlag.AlignRight if USE_QT6 else QtCore.Qt.AlignRight
63+
)
64+
QT_ALIGN_BOTTOM = (
65+
QtCore.Qt.AlignmentFlag.AlignBottom if USE_QT6 else QtCore.Qt.AlignBottom
66+
)
67+
QT_ALIGN_TOP = QtCore.Qt.AlignmentFlag.AlignTop if USE_QT6 else QtCore.Qt.AlignTop
68+
69+
#focus
70+
QT_NO_FOCUS = QtCore.Qt.FocusPolicy.NoFocus if USE_QT6 else QtCore.Qt.NoFocus
71+
QT_STRONG_FOCUS = (
72+
QtCore.Qt.FocusPolicy.StrongFocus if USE_QT6 else QtCore.Qt.StrongFocus
73+
)
74+
QT_TAB_FOCUS_REASON = (
75+
QtCore.Qt.FocusReason.TabFocusReason if USE_QT6 else QtCore.Qt.TabFocusReason
76+
)
77+
QT_BACKTAB_FOCUS_REASON = (
78+
QtCore.Qt.FocusReason.BacktabFocusReason
79+
if USE_QT6
80+
else QtCore.Qt.BacktabFocusReason
81+
)
82+
83+
# for draw_display
84+
QT_FORMAT_RGB888 = (
85+
QtGui.QImage.Format.Format_RGB888 if USE_QT6 else QtGui.QImage.Format_RGB888
86+
)
87+
QT_FORMAT_MONO = (
88+
QtGui.QImage.Format.Format_Mono if USE_QT6 else QtGui.QImage.Format_Mono
89+
)
90+

modules/_qt_qtwidgets.py

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import os
2+
3+
4+
USE_QT6 = False
5+
USE_PYQT6 = False
6+
USE_PYQT5 = False
7+
USE_PYSIDE6 = False
8+
QT_PACKAGE = ""
9+
10+
try:
11+
raise ImportError
12+
import PySide6.QtCore as QtCore
13+
import PySide6.QtGui as QtGui
14+
import PySide6.QtWidgets as QtWidgets
15+
USE_QT6 = True
16+
USE_PYSIDE6 = True
17+
QT_PACKAGE = "PySide6"
18+
except (ImportError, ModuleNotFoundError):
19+
try:
20+
import PyQt6.QtCore as QtCore
21+
import PyQt6.QtWidgets as QtWidgets
22+
import PyQt6.QtGui as QtGui
23+
USE_QT6 = True
24+
USE_PYQT6 = True
25+
QT_PACKAGE = "PyQt6"
26+
except (ImportError, ModuleNotFoundError):
27+
import PyQt5.QtCore as QtCore
28+
import PyQt5.QtWidgets as QtWidgets
29+
import PyQt5.QtGui as QtGui
30+
USE_PYQT5 = True
31+
QT_PACKAGE = "PyQt5"
32+
33+
import modules._qt_ver as _qt_ver
34+
_qt_ver.USE_QT6 = USE_QT6
35+
_qt_ver.USE_PYQT6 = USE_PYQT6
36+
_qt_ver.USE_PYQT5 = USE_PYQT5
37+
_qt_ver.USE_PYSIDE6 = USE_PYSIDE6
38+
_qt_ver.QT_PACKAGE = QT_PACKAGE
39+
_qt_ver.QtCore = QtCore
40+
_qt_ver.QtGui = QtGui
41+
42+
from modules._qt_constants import *
43+
44+
# pyqtgraph will check/try to import PyQT6 on load and might fail if some packages were imported
45+
# (if pyQt6 is halfway installed): so we force the version here
46+
os.environ.setdefault("PYQTGRAPH_QT_LIB", qasync.QtModuleName)
47+
48+
# make sure pyqtgraph it imported from here so PYQTGRAPH_QT_LIB will always be set
49+
import pyqtgraph as pg # noqa
50+
51+
# set default configuration
52+
pg.setConfigOptions(antialias=True)
53+
pg.setConfigOption("background", "w")
54+
pg.setConfigOption("foreground", "k")
55+
56+
# QtWidgets
57+
QT_EXPANDING = (
58+
QtWidgets.QSizePolicy.Policy.Expanding
59+
if USE_QT6
60+
else QtWidgets.QSizePolicy.Expanding
61+
)
62+
QT_FIXED = (
63+
QtWidgets.QSizePolicy.Policy.Fixed if USE_QT6 else QtWidgets.QSizePolicy.Fixed
64+
)
65+
66+
# for textedit
67+
QT_SCROLLBAR_ALWAYSOFF = (
68+
QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff
69+
if USE_QT6
70+
else QtCore.Qt.ScrollBarAlwaysOff
71+
)
72+
QT_TEXTEDIT_NOWRAP = (
73+
QtWidgets.QTextEdit.LineWrapMode.NoWrap if USE_QT6 else QtWidgets.QTextEdit.NoWrap
74+
)
75+
76+
# for popup
77+
QT_STACKINGMODE_STACKONE = (
78+
QtWidgets.QStackedLayout.StackingMode.StackOne
79+
if USE_QT6
80+
else QtWidgets.QStackedLayout.StackOne
81+
)
82+
QT_STACKINGMODE_STACKALL = (
83+
QtWidgets.QStackedLayout.StackingMode.StackAll
84+
if USE_QT6
85+
else QtWidgets.QStackedLayout.StackAll
86+
)
87+
QT_PE_WIDGET = (
88+
QtWidgets.QStyle.PrimitiveElement.PE_Widget
89+
if USE_QT6
90+
else QtWidgets.QStyle.PE_Widget
91+
)
92+
QT_WA_TRANSLUCENT_BACKGROUND = (
93+
QtCore.Qt.WidgetAttribute.WA_TranslucentBackground
94+
if USE_QT6
95+
else QtCore.Qt.WA_TranslucentBackground
96+
)
97+
QT_WA_TRANSPARENT_FOR_MOUSE_EVENTS = (
98+
QtCore.Qt.WidgetAttribute.WA_TransparentForMouseEvents
99+
if USE_QT6
100+
else QtCore.Qt.WA_TransparentForMouseEvents
101+
)
102+
103+
# for map widgets
104+
QT_COMPOSITION_MODE_SOURCEIN = (
105+
QtGui.QPainter.CompositionMode.CompositionMode_SourceIn
106+
if USE_QT6
107+
else QtGui.QPainter.CompositionMode_SourceIn
108+
)
109+
QT_COMPOSITION_MODE_DARKEN = (
110+
QtGui.QPainter.CompositionMode.CompositionMode_Darken
111+
if USE_QT6
112+
else QtGui.QPainter.CompositionMode_Darken
113+
)

modules/_qt_ver.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
USE_QT6 = False
2+
USE_PYQT6 = False
3+
USE_PYQT5 = False
4+
USE_PYSIDE6 = False
5+
QtCore = None
6+
QtGui = None
7+
QtMode = ""
8+
QT_PACKAGE = ""

0 commit comments

Comments
 (0)