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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy