Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0009b81

Browse files
committed
Bump minimum QT5 version to 5.12
1 parent fb86113 commit 0009b81

File tree

6 files changed

+47
-194
lines changed

6 files changed

+47
-194
lines changed

lib/matplotlib/backends/backend_qt.py

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
from . import qt_compat
1515
from .qt_compat import (
1616
QtCore, QtGui, QtWidgets, __version__, QT_API,
17-
_enum, _to_int, _isdeleted, _maybe_allow_interrupt
17+
_to_int, _isdeleted, _maybe_allow_interrupt
1818
)
1919

2020

2121
# SPECIAL_KEYS are Qt::Key that do *not* return their Unicode name
2222
# instead they have manually specified names.
2323
SPECIAL_KEYS = {
24-
_to_int(getattr(_enum("QtCore.Qt.Key"), k)): v for k, v in [
24+
_to_int(getattr(QtCore.Qt.Key, k)): v for k, v in [
2525
("Key_Escape", "escape"),
2626
("Key_Tab", "tab"),
2727
("Key_Backspace", "backspace"),
@@ -66,8 +66,8 @@
6666
# Elements are (Qt::KeyboardModifiers, Qt::Key) tuples.
6767
# Order determines the modifier order (ctrl+alt+...) reported by Matplotlib.
6868
_MODIFIER_KEYS = [
69-
(_to_int(getattr(_enum("QtCore.Qt.KeyboardModifier"), mod)),
70-
_to_int(getattr(_enum("QtCore.Qt.Key"), key)))
69+
(_to_int(getattr(QtCore.Qt.KeyboardModifier, mod)),
70+
_to_int(getattr(QtCore.Qt.Key, key)))
7171
for mod, key in [
7272
("ControlModifier", "Key_Control"),
7373
("AltModifier", "Key_Alt"),
@@ -76,7 +76,7 @@
7676
]
7777
]
7878
cursord = {
79-
k: getattr(_enum("QtCore.Qt.CursorShape"), v) for k, v in [
79+
k: getattr(QtCore.Qt.CursorShape, v) for k, v in [
8080
(cursors.MOVE, "SizeAllCursor"),
8181
(cursors.HAND, "PointingHandCursor"),
8282
(cursors.POINTER, "ArrowCursor"),
@@ -130,11 +130,8 @@ def _create_qApp():
130130
'versions may not work as expected.'
131131
)
132132
break
133-
try:
134-
QtWidgets.QApplication.setAttribute(
135-
QtCore.Qt.AA_EnableHighDpiScaling)
136-
except AttributeError: # Only for Qt>=5.6, <6.
137-
pass
133+
QtWidgets.QApplication.setAttribute(
134+
QtCore.Qt.ApplicationAttribute.AA_EnableHighDpiScaling)
138135
try:
139136
QtWidgets.QApplication.setHighDpiScaleFactorRoundingPolicy(
140137
QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
@@ -148,10 +145,7 @@ def _create_qApp():
148145
app.lastWindowClosed.connect(app.quit)
149146
cbook._setup_new_guiapp()
150147

151-
try:
152-
app.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps) # Only for Qt<6.
153-
except AttributeError:
154-
pass
148+
app.setAttribute(QtCore.Qt.ApplicationAttribute.AA_UseHighDpiPixmaps)
155149

156150
return app
157151

@@ -191,7 +185,7 @@ class FigureCanvasQT(FigureCanvasBase, QtWidgets.QWidget):
191185
manager_class = _api.classproperty(lambda cls: FigureManagerQT)
192186

193187
buttond = {
194-
getattr(_enum("QtCore.Qt.MouseButton"), k): v for k, v in [
188+
getattr(QtCore.Qt.MouseButton, k): v for k, v in [
195189
("LeftButton", MouseButton.LEFT),
196190
("RightButton", MouseButton.RIGHT),
197191
("MiddleButton", MouseButton.MIDDLE),
@@ -209,8 +203,7 @@ def __init__(self, figure=None):
209203
self._draw_rect_callback = lambda painter: None
210204
self._in_resize_event = False
211205

212-
self.setAttribute(
213-
_enum("QtCore.Qt.WidgetAttribute").WA_OpaquePaintEvent)
206+
self.setAttribute(QtCore.Qt.WidgetAttribute.WA_OpaquePaintEvent)
214207
self.setMouseTracking(True)
215208
self.resize(*self.get_width_height())
216209

@@ -564,7 +557,7 @@ def __init__(self, canvas, num):
564557
# StrongFocus accepts both tab and click to focus and will enable the
565558
# canvas to process event without clicking.
566559
# https://doc.qt.io/qt-5/qt.html#FocusPolicy-enum
567-
self.canvas.setFocusPolicy(_enum("QtCore.Qt.FocusPolicy").StrongFocus)
560+
self.canvas.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
568561
self.canvas.setFocus()
569562

570563
self.window.raise_()
@@ -642,8 +635,8 @@ def __init__(self, canvas, parent=None, coordinates=True):
642635
"""coordinates: should we show the coordinates on the right?"""
643636
QtWidgets.QToolBar.__init__(self, parent)
644637
self.setAllowedAreas(QtCore.Qt.ToolBarArea(
645-
_to_int(_enum("QtCore.Qt.ToolBarArea").TopToolBarArea) |
646-
_to_int(_enum("QtCore.Qt.ToolBarArea").BottomToolBarArea)))
638+
QtCore.Qt.ToolBarArea.TopToolBarArea |
639+
QtCore.Qt.ToolBarArea.BottomToolBarArea))
647640

648641
self.coordinates = coordinates
649642
self._actions = {} # mapping of toolitem method names to QActions.
@@ -667,11 +660,12 @@ def __init__(self, canvas, parent=None, coordinates=True):
667660
if self.coordinates:
668661
self.locLabel = QtWidgets.QLabel("", self)
669662
self.locLabel.setAlignment(QtCore.Qt.AlignmentFlag(
670-
_to_int(_enum("QtCore.Qt.AlignmentFlag").AlignRight) |
671-
_to_int(_enum("QtCore.Qt.AlignmentFlag").AlignVCenter)))
663+
QtCore.Qt.AlignmentFlag.AlignRight |
664+
QtCore.Qt.AlignmentFlag.AlignVCenter
665+
))
672666
self.locLabel.setSizePolicy(QtWidgets.QSizePolicy(
673-
_enum("QtWidgets.QSizePolicy.Policy").Expanding,
674-
_enum("QtWidgets.QSizePolicy.Policy").Ignored,
667+
QtWidgets.QSizePolicy.Policy.Expanding,
668+
QtWidgets.QSizePolicy.Policy.Ignored,
675669
))
676670
labelAction = self.addWidget(self.locLabel)
677671
labelAction.setVisible(True)
@@ -697,7 +691,7 @@ def _icon(self, name):
697691
icon_color = self.palette().color(self.foregroundRole())
698692
mask = pm.createMaskFromColor(
699693
QtGui.QColor('black'),
700-
_enum("QtCore.Qt.MaskMode").MaskOutColor)
694+
QtCore.Qt.MaskMode.MaskOutColor)
701695
pm.fill(icon_color)
702696
pm.setMask(mask)
703697
return QtGui.QIcon(pm)
@@ -801,8 +795,8 @@ def save_figure(self, *args):
801795
except Exception as e:
802796
QtWidgets.QMessageBox.critical(
803797
self, "Error saving file", str(e),
804-
_enum("QtWidgets.QMessageBox.StandardButton").Ok,
805-
_enum("QtWidgets.QMessageBox.StandardButton").NoButton)
798+
QtWidgets.QMessageBox.StandardButton.Ok,
799+
QtWidgets.QMessageBox.StandardButton.NoButton)
806800

807801
def set_history_buttons(self):
808802
can_backward = self._nav_stack._pos > 0
@@ -916,15 +910,15 @@ def __init__(self, toolmanager, parent=None):
916910
ToolContainerBase.__init__(self, toolmanager)
917911
QtWidgets.QToolBar.__init__(self, parent)
918912
self.setAllowedAreas(QtCore.Qt.ToolBarArea(
919-
_to_int(_enum("QtCore.Qt.ToolBarArea").TopToolBarArea) |
920-
_to_int(_enum("QtCore.Qt.ToolBarArea").BottomToolBarArea)))
913+
QtCore.Qt.ToolBarArea.TopToolBarArea |
914+
QtCore.Qt.ToolBarArea.BottomToolBarArea))
921915
message_label = QtWidgets.QLabel("")
922916
message_label.setAlignment(QtCore.Qt.AlignmentFlag(
923-
_to_int(_enum("QtCore.Qt.AlignmentFlag").AlignRight) |
924-
_to_int(_enum("QtCore.Qt.AlignmentFlag").AlignVCenter)))
917+
QtCore.Qt.AlignmentFlag.AlignRight |
918+
QtCore.Qt.AlignmentFlag.AlignVCenter))
925919
message_label.setSizePolicy(QtWidgets.QSizePolicy(
926-
_enum("QtWidgets.QSizePolicy.Policy").Expanding,
927-
_enum("QtWidgets.QSizePolicy.Policy").Ignored,
920+
QtWidgets.QSizePolicy.Policy.Expanding,
921+
QtWidgets.QSizePolicy.Policy.Ignored,
928922
))
929923
self._message_action = self.addWidget(message_label)
930924
self._toolitems = {}

lib/matplotlib/backends/backend_qtagg.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
from matplotlib.transforms import Bbox
88

9-
from .qt_compat import QT_API, _enum
9+
from .qt_compat import QT_API, QtCore, QtGui
1010
from .backend_agg import FigureCanvasAgg
11-
from .backend_qt import QtCore, QtGui, _BackendQT, FigureCanvasQT
11+
from .backend_qt import _BackendQT, FigureCanvasQT
1212
from .backend_qt import ( # noqa: F401 # pylint: disable=W0611
1313
FigureManagerQT, NavigationToolbar2QT)
1414

@@ -57,7 +57,7 @@ def paintEvent(self, event):
5757

5858
painter.eraseRect(rect) # clear the widget canvas
5959
qimage = QtGui.QImage(ptr, buf.shape[1], buf.shape[0],
60-
_enum("QtGui.QImage.Format").Format_RGBA8888)
60+
QtGui.QImage.Format.Format_RGBA8888)
6161
qimage.setDevicePixelRatio(self.device_pixel_ratio)
6262
# set origin using original QT coordinates
6363
origin = QtCore.QPoint(rect.left(), rect.top())

lib/matplotlib/backends/backend_qtcairo.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import ctypes
22

33
from .backend_cairo import cairo, FigureCanvasCairo
4-
from .backend_qt import QtCore, QtGui, _BackendQT, FigureCanvasQT
5-
from .qt_compat import QT_API, _enum
4+
from .backend_qt import _BackendQT, FigureCanvasQT
5+
from .qt_compat import QT_API, QtCore, QtGui
66

77

88
class FigureCanvasQTCairo(FigureCanvasCairo, FigureCanvasQT):
@@ -28,7 +28,7 @@ def paintEvent(self, event):
2828
ptr = buf
2929
qimage = QtGui.QImage(
3030
ptr, width, height,
31-
_enum("QtGui.QImage.Format").Format_ARGB32_Premultiplied)
31+
QtGui.QImage.Format.Format_ARGB32_Premultiplied)
3232
# Adjust the buf reference count to work around a memory leak bug in
3333
# QImage under PySide.
3434
if QT_API == "PySide2" and QtCore.__version_info__ < (5, 12):

lib/matplotlib/backends/qt_compat.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,11 @@ def _isdeleted(obj):
139139
_version_info = tuple(QtCore.QLibraryInfo.version().segments())
140140

141141

142-
if _version_info < (5, 10):
142+
if _version_info < (5, 12):
143143
raise ImportError(
144144
f"The Qt version imported is "
145145
f"{QtCore.QLibraryInfo.version().toString()} but Matplotlib requires "
146-
f"Qt>=5.10")
146+
f"Qt>=5.12")
147147

148148

149149
# Fixes issues with Big Sur
@@ -154,17 +154,6 @@ def _isdeleted(obj):
154154
os.environ.setdefault("QT_MAC_WANTS_LAYER", "1")
155155

156156

157-
# PyQt6 enum compat helpers.
158-
159-
160-
@functools.cache
161-
def _enum(name):
162-
# foo.bar.Enum.Entry (PyQt6) <=> foo.bar.Entry (non-PyQt6).
163-
return operator.attrgetter(
164-
name if QT_API == 'PyQt6' else name.rpartition(".")[0]
165-
)(sys.modules[QtCore.__package__])
166-
167-
168157
# Backports.
169158

170159

@@ -207,7 +196,7 @@ def _maybe_allow_interrupt(qapp):
207196
wsock.setblocking(False)
208197
old_wakeup_fd = signal.set_wakeup_fd(wsock.fileno())
209198
sn = QtCore.QSocketNotifier(
210-
rsock.fileno(), _enum('QtCore.QSocketNotifier.Type').Read
199+
rsock.fileno(), QtCore.QSocketNotifier.Type.Read
211200
)
212201

213202
# We do not actually care about this value other than running some

lib/matplotlib/backends/qt_editor/_formlayout.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@
4747
from numbers import Integral, Real
4848

4949
from matplotlib import _api, colors as mcolors
50-
from matplotlib.backends.qt_compat import (
51-
QtGui, QtWidgets, QtCore, _enum, _to_int)
50+
from matplotlib.backends.qt_compat import QtGui, QtWidgets, QtCore
5251

5352
_log = logging.getLogger(__name__)
5453

@@ -71,7 +70,7 @@ def __init__(self, parent=None):
7170
def choose_color(self):
7271
color = QtWidgets.QColorDialog.getColor(
7372
self._color, self.parentWidget(), "",
74-
_enum("QtWidgets.QColorDialog.ColorDialogOption").ShowAlphaChannel)
73+
QtWidgets.QColorDialog.ColorDialogOption.ShowAlphaChannel)
7574
if color.isValid():
7675
self.set_color(color)
7776

@@ -204,7 +203,7 @@ def get_font(self):
204203
def is_edit_valid(edit):
205204
text = edit.text()
206205
state = edit.validator().validate(text, 0)[0]
207-
return state == _enum("QtGui.QDoubleValidator.State").Acceptable
206+
return state == QtGui.QDoubleValidator.State.Acceptable
208207

209208

210209
class FormWidget(QtWidgets.QWidget):
@@ -442,15 +441,13 @@ def __init__(self, data, title="", comment="",
442441
# Button box
443442
self.bbox = bbox = QtWidgets.QDialogButtonBox(
444443
QtWidgets.QDialogButtonBox.StandardButton(
445-
_to_int(
446-
_enum("QtWidgets.QDialogButtonBox.StandardButton").Ok) |
447-
_to_int(
448-
_enum("QtWidgets.QDialogButtonBox.StandardButton").Cancel)
444+
QtWidgets.QDialogButtonBox.StandardButton.Ok |
445+
QtWidgets.QDialogButtonBox.StandardButton.Cancel
449446
))
450447
self.formwidget.update_buttons.connect(self.update_buttons)
451448
if self.apply_callback is not None:
452449
apply_btn = bbox.addButton(
453-
_enum("QtWidgets.QDialogButtonBox.StandardButton").Apply)
450+
QtWidgets.QDialogButtonBox.StandardButton.Apply)
454451
apply_btn.clicked.connect(self.apply)
455452

456453
bbox.accepted.connect(self.accept)
@@ -475,7 +472,7 @@ def update_buttons(self):
475472
valid = False
476473
for btn_type in ["Ok", "Apply"]:
477474
btn = self.bbox.button(
478-
getattr(_enum("QtWidgets.QDialogButtonBox.StandardButton"),
475+
getattr(QtWidgets.QDialogButtonBox.StandardButton,
479476
btn_type))
480477
if btn is not None:
481478
btn.setEnabled(valid)

0 commit comments

Comments
 (0)