is_assignments/a2/code/.venv/lib/python3.10/site-packages/qtpy/QtGui.py

75 lines
3.2 KiB
Python
Raw Normal View History

2022-12-19 10:09:00 +01:00
# -----------------------------------------------------------------------------
# Copyright © 2014-2015 Colin Duquesnoy
# Copyright © 2009- The Spyder Development Team
#
# Licensed under the terms of the MIT License
# (see LICENSE.txt for details)
# -----------------------------------------------------------------------------
"""Provides QtGui classes and functions."""
from . import PYQT6, PYQT5, PYSIDE2, PYSIDE6
if PYQT5:
from PyQt5.QtGui import *
elif PYQT6:
from PyQt6 import QtGui
from PyQt6.QtGui import *
from PyQt6.QtOpenGL import *
QFontMetrics.width = lambda self, *args, **kwargs: self.horizontalAdvance(*args, **kwargs)
QFontMetricsF.width = lambda self, *args, **kwargs: self.horizontalAdvance(*args, **kwargs)
# Map missing/renamed methods
QDrag.exec_ = lambda self, *args, **kwargs: self.exec(*args, **kwargs)
QGuiApplication.exec_ = QGuiApplication.exec
QTextDocument.print_ = lambda self, *args, **kwargs: self.print(*args, **kwargs)
# Allow unscoped access for enums inside the QtGui module
from .enums_compat import promote_enums
promote_enums(QtGui)
del QtGui
elif PYSIDE2:
from PySide2.QtGui import *
if hasattr(QFontMetrics, 'horizontalAdvance'):
# Needed to prevent raising a DeprecationWarning when using QFontMetrics.width
QFontMetrics.width = lambda self, *args, **kwargs: self.horizontalAdvance(*args, **kwargs)
elif PYSIDE6:
from PySide6.QtGui import *
from PySide6.QtOpenGL import *
QFontMetrics.width = lambda self, *args, **kwargs: self.horizontalAdvance(*args, **kwargs)
QFontMetricsF.width = lambda self, *args, **kwargs: self.horizontalAdvance(*args, **kwargs)
# Map DeprecationWarning methods
QDrag.exec_ = lambda self, *args, **kwargs: self.exec(*args, **kwargs)
QGuiApplication.exec_ = QGuiApplication.exec
if PYSIDE2 or PYSIDE6:
# PySide{2,6} do not accept the `mode` keyword argument in
# QTextCursor.movePosition() even though it is a valid optional argument
# as per C++ API. Fix this by monkeypatching.
#
# Notes:
#
# * The `mode` argument is called `arg__2` in PySide{2,6} as per
# QTextCursor.movePosition.__doc__ and __signature__. Using `arg__2` as
# keyword argument works as intended, so does using a positional
# argument. Tested with PySide2 5.15.0, 5.15.2.1 and 5.15.3 and PySide6
# 6.3.0; older version, down to PySide 1, are probably affected as well [1].
#
# * PySide2 5.15.0 and 5.15.2.1 silently ignore invalid keyword arguments,
# i.e. passing the `mode` keyword argument has no effect and doesnt
# raise an exception. Older versions, down to PySide 1, are probably
# affected as well [1]. At least PySide2 5.15.3 and PySide6 6.3.0 raise an
# exception when `mode` or any other invalid keyword argument is passed.
#
# [1] https://bugreports.qt.io/browse/PYSIDE-185
movePosition = QTextCursor.movePosition
def movePositionPatched(
self,
operation: QTextCursor.MoveOperation,
mode: QTextCursor.MoveMode = QTextCursor.MoveAnchor,
n: int = 1,
) -> bool:
return movePosition(self, operation, mode, n)
QTextCursor.movePosition = movePositionPatched