Skip to content

Commit 67056f0

Browse files
committed
Add QtCompat for deprecated QMouseEvent methods
Qt6.0 deprecated many MouseEvent methods. PyQt6 does not expose these deprecated methods. This adds compatibility wrappers for this.
1 parent fa28adb commit 67056f0

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ Qt.py enables you to write software that runs on any of the 4 supported bindings
6767
- [Projects using Qt.py](#projects-using-qtpy)
6868
- [Projects similar to Qt.py](#projects-similar-to-qtpy)
6969
- [Developer guide](#developer-guide)
70-
- [Qt 6 transition guide](#qt-6-transition-guide)
7170

7271
<br>
7372
<br>
@@ -643,6 +642,15 @@ To make a new release onto PyPI, you'll need to have the correct permissions and
643642
| `QApplication.exec_()` | `QtCompat.QApplication.exec_()` | `exec` is no longer a reserved keyword in python 3 so Qt6 is removing the underscore from `exec_`. Qt.py is using exec_ to preserve compatibility with python 2. The same applies for `QCoreApplication`.
644643
| `QAction().setShortcut(Qt.SHIFT\|Qt.Key_Backspace)` | `QAction().setShortcut(QKeySequence(Qt.Modifier.SHIFT\|Qt.Key.Key_Backspace))` | PyQt6 doesn't accept `QKeyCombination` objects for shortcuts. To work around this cast them to `QKeySequence` objects.
645644
| int(QMainWindow().windowState()) | QtCompat.enumValue(QMainWindow().windowState()) | Consistent interface to convert an enum to an `int`
645+
| `QMouseEvent.globalPos()` | `QtCompat.QMouseEvent().globalPosition(event).toPoint()` | Deprecated in Qt6.0 and removed from PyQt6, currently still in PySide6. Changes from `QPoint` to `QPointF`.
646+
| `QMouseEvent.globalX()` | `QtCompat.QMouseEvent().globalPosition(event).x()` | See `globalPos()`
647+
| `QMouseEvent.globalY()` | `QtCompat.QMouseEvent().globalPosition(event).y()` | See `globalPos()`
648+
| `QMouseEvent.localPos()` | `QtCompat.QMouseEvent().position(event)` | See `globalPos()`
649+
| `QMouseEvent.pos()` | `QtCompat.QMouseEvent().position(event)` | Changes from `QPoint` to `QPointF`. See `globalPos()`
650+
| `QMouseEvent.screenPos()` | `QtCompat.QMouseEvent().globalPosition(event)` | See `globalPos()`
651+
| `QMouseEvent.windowPos()` | `QtCompat.QMouseEvent().scenePosition(event)` | See `globalPos()`
652+
| `QMouseEvent.x()` | `QtCompat.QMouseEvent().position(event).x()` | See `globalPos()`
653+
| `QMouseEvent.y()` | `QtCompat.QMouseEvent().position(event).y()` | See `globalPos()`
646654
| | Submit your known issues here! |
647655

648656
##### Removed Members (Qt.py\==2.\*)

src/Qt.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,11 @@ def wrapper(self, descrip):
15771577
"fromString": "QtGui.QFont.fromString",
15781578
"setWeight": "QtGui.QFont.setWeight",
15791579
},
1580+
"QMouseEvent": {
1581+
"globalPosition": "QtGui.QMouseEvent.globalPosition",
1582+
"position": "QtGui.QMouseEvent.position",
1583+
"scenePosition": "QtGui.QMouseEvent.scenePosition",
1584+
},
15801585
"Qt": {
15811586
"MidButton": "QtCore.Qt.MiddleButton",
15821587
},
@@ -1608,6 +1613,11 @@ def wrapper(self, descrip):
16081613
"fromString": "QtGui.QFont.fromString",
16091614
"setWeight": "QtGui.QFont.setWeight",
16101615
},
1616+
"QMouseEvent": {
1617+
"globalPosition": "QtGui.QMouseEvent.globalPosition",
1618+
"position": "QtGui.QMouseEvent.position",
1619+
"scenePosition": "QtGui.QMouseEvent.scenePosition",
1620+
},
16111621
"Qt": {
16121622
"MidButton": "QtCore.Qt.MouseButton.MiddleButton",
16131623
"WindowMinMaxButtonsHint": "QtCore.Qt.WindowType.WindowMinMaxButtonsHint",
@@ -1640,6 +1650,11 @@ def wrapper(self, descrip):
16401650
"fromString": "QtGui.QFont.fromString",
16411651
"setWeight": "QtGui.QFont.setWeight",
16421652
},
1653+
"QMouseEvent": {
1654+
"globalPosition": "QtGui.QMouseEvent.screenPos",
1655+
"position": "QtGui.QMouseEvent.localPos",
1656+
"scenePosition": "QtGui.QMouseEvent.windowPos",
1657+
},
16431658
"Qt": {
16441659
"MidButton": "QtCore.Qt.MiddleButton",
16451660
},
@@ -1671,6 +1686,11 @@ def wrapper(self, descrip):
16711686
"fromString": "QtGui.QFont.fromString",
16721687
"setWeight": "QtGui.QFont.setWeight",
16731688
},
1689+
"QMouseEvent": {
1690+
"globalPosition": "QtGui.QMouseEvent.screenPos",
1691+
"position": "QtGui.QMouseEvent.localPos",
1692+
"scenePosition": "QtGui.QMouseEvent.windowPos",
1693+
},
16741694
"Qt": {
16751695
"MidButton": "QtCore.Qt.MiddleButton",
16761696
},

tests.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,15 +1148,13 @@ def test_binding_states():
11481148
def test_qtcompat_base_class():
11491149
"""Tests to ensure the QtCompat namespace object works as expected"""
11501150
import sys
1151-
import Qt
1152-
from Qt import QtWidgets
1153-
from Qt import QtCompat
1151+
from Qt import QtCompat, QtCore, QtGui, QtWidgets
11541152

11551153
if not QtWidgets.QApplication.instance():
11561154
app = QtWidgets.QApplication(sys.argv)
11571155
else:
11581156
app = QtWidgets.QApplication.instance() # noqa: F841
1159-
header = QtWidgets.QHeaderView(get_enum(Qt.QtCore.Qt, "Orientation", "Horizontal"))
1157+
header = QtWidgets.QHeaderView(get_enum(QtCore.Qt, "Orientation", "Horizontal"))
11601158

11611159
# Spot check compatibility functions
11621160
QtCompat.QHeaderView.setSectionsMovable(header, False)
@@ -1169,6 +1167,21 @@ def test_qtcompat_base_class():
11691167
pixmap = QtCompat.QWidget.grab(button)
11701168
assert not pixmap.isNull()
11711169

1170+
# Check QMouseEvent compatibility wrappers
1171+
# NOTE: PyQt6 requires passing QPointF. Also it doesn't have Qt.MouseButtons
1172+
mouse_event = QtGui.QMouseEvent(
1173+
QtCore.QEvent.Type.MouseButtonPress,
1174+
QtCore.QPointF(1, 1),
1175+
QtCore.QPointF(2, 2),
1176+
QtCore.QPointF(3, 3),
1177+
QtCore.Qt.MouseButton.LeftButton,
1178+
QtCore.Qt.MouseButton.LeftButton | QtCore.Qt.MouseButton.RightButton,
1179+
QtCore.Qt.KeyboardModifier.NoModifier,
1180+
)
1181+
assert QtCompat.QMouseEvent.globalPosition(mouse_event) == QtCore.QPointF(3, 3)
1182+
assert QtCompat.QMouseEvent.position(mouse_event) == QtCore.QPointF(1, 1)
1183+
assert QtCompat.QMouseEvent.scenePosition(mouse_event) == QtCore.QPointF(2, 2)
1184+
11721185

11731186
def test_cli():
11741187
"""Qt.py is available from the command-line"""

0 commit comments

Comments
 (0)