From aa66dfedd6bf3716fb969360d3ffc77a5f0d817d Mon Sep 17 00:00:00 2001 From: "J. Goutin" Date: Thu, 14 Apr 2016 18:59:19 +0200 Subject: [PATCH 1/6] Option to enable/disable key auto-repeat for QtAgg Add to "keyPressAutoRepeat" and "keyReleaseAutoRepeat" properties to FigureCanvasQT. If True, enable key auto-repeat for press and release events respectively. --- lib/matplotlib/backends/backend_qt5.py | 35 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index 1adda350b9bf..020a821e871a 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -137,7 +137,7 @@ def _create_qApp(): if display is None or not re.search(':\d', display): raise RuntimeError('Invalid DISPLAY variable') - qApp = QtWidgets.QApplication([six.text_type(" ")]) + qApp = QtWidgets.QApplication([str(" ")]) qApp.lastWindowClosed.connect(qApp.quit) else: qApp = app @@ -226,6 +226,10 @@ class FigureCanvasQT(QtWidgets.QWidget, FigureCanvasBase): # QtCore.Qt.XButton2: None, } + # Key auto-repeat disabled by default + _keypressautorepeat = False + _keyreleaseautorepeat = False + def __init__(self, figure): if DEBUG: print('FigureCanvasQt qt5: ', figure) @@ -307,6 +311,8 @@ def wheelEvent(self, event): 'steps = %i ' % (event.delta(), steps)) def keyPressEvent(self, event): + if not self._keypressautorepeat and event.isAutoRepeat(): + return key = self._get_key(event) if key is None: return @@ -314,7 +320,20 @@ def keyPressEvent(self, event): if DEBUG: print('key press', key) + @property + def keyPressAutoRepeat(self): + """ + If True, enable auto-repeat for key press events. + """ + return self._keypressautorepeat + + @keyPressAutoRepeat.setter + def keyPressAutoRepeat(self, val): + self._keypressautorepeat = bool(val) + def keyReleaseEvent(self, event): + if not self._keyreleaseautorepeat and event.isAutoRepeat(): + return key = self._get_key(event) if key is None: return @@ -322,6 +341,17 @@ def keyReleaseEvent(self, event): if DEBUG: print('key release', key) + @property + def keyReleaseAutoRepeat(self): + """ + If True, enable auto-repeat for key release events. + """ + return self._keyreleaseautorepeat + + @keyReleaseAutoRepeat.setter + def keyReleaseAutoRepeat(self, val): + self._keyreleaseautorepeat = bool(val) + def resizeEvent(self, event): w = event.size().width() h = event.size().height() @@ -344,9 +374,6 @@ def minumumSizeHint(self): return QtCore.QSize(10, 10) def _get_key(self, event): - if event.isAutoRepeat(): - return None - event_key = event.key() event_mods = int(event.modifiers()) # actually a bitmask From e683c8c1ec7de24ea9ff437fd4d5aec7ff7f5959 Mon Sep 17 00:00:00 2001 From: "J. Goutin" Date: Thu, 14 Apr 2016 19:04:09 +0200 Subject: [PATCH 2/6] Update backend_qt5.py --- lib/matplotlib/backends/backend_qt5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index 020a821e871a..f77fbab48b93 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -137,7 +137,7 @@ def _create_qApp(): if display is None or not re.search(':\d', display): raise RuntimeError('Invalid DISPLAY variable') - qApp = QtWidgets.QApplication([str(" ")]) + qApp = QtWidgets.QApplication([six.text_type(" ")]) qApp.lastWindowClosed.connect(qApp.quit) else: qApp = app From cd59be63e80bd723ca85a309f11120e49c7f440b Mon Sep 17 00:00:00 2001 From: "J. Goutin" Date: Sat, 16 Apr 2016 10:47:57 +0200 Subject: [PATCH 3/6] Update backend_qt5.py Key auto-repeat for push and release in one attribute. Auto-repeat On by default for QT5. --- lib/matplotlib/backends/backend_qt5.py | 39 +++++++++----------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index f77fbab48b93..c848fbf2aafb 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -172,7 +172,7 @@ def new_figure_manager_given_figure(num, figure): class TimerQT(TimerBase): ''' - Subclass of :class:`backend_bases.TimerBase` that uses Qt4 timer events. + Subclass of :class:`backend_bases.TimerBase` that uses Qt timer events. Attributes: * interval: The time between timer events in milliseconds. Default @@ -226,10 +226,6 @@ class FigureCanvasQT(QtWidgets.QWidget, FigureCanvasBase): # QtCore.Qt.XButton2: None, } - # Key auto-repeat disabled by default - _keypressautorepeat = False - _keyreleaseautorepeat = False - def __init__(self, figure): if DEBUG: print('FigureCanvasQt qt5: ', figure) @@ -246,6 +242,9 @@ def __init__(self, figure): w, h = self.get_width_height() self.resize(w, h) + # Key auto-repeat enabled by default + self._keyautorepeat = True + def enterEvent(self, event): FigureCanvasBase.enter_notify_event(self, guiEvent=event) @@ -311,8 +310,6 @@ def wheelEvent(self, event): 'steps = %i ' % (event.delta(), steps)) def keyPressEvent(self, event): - if not self._keypressautorepeat and event.isAutoRepeat(): - return key = self._get_key(event) if key is None: return @@ -320,20 +317,7 @@ def keyPressEvent(self, event): if DEBUG: print('key press', key) - @property - def keyPressAutoRepeat(self): - """ - If True, enable auto-repeat for key press events. - """ - return self._keypressautorepeat - - @keyPressAutoRepeat.setter - def keyPressAutoRepeat(self, val): - self._keypressautorepeat = bool(val) - def keyReleaseEvent(self, event): - if not self._keyreleaseautorepeat and event.isAutoRepeat(): - return key = self._get_key(event) if key is None: return @@ -342,15 +326,15 @@ def keyReleaseEvent(self, event): print('key release', key) @property - def keyReleaseAutoRepeat(self): + def keyAutoRepeat(self): """ - If True, enable auto-repeat for key release events. + If True, enable auto-repeat for key events. """ - return self._keyreleaseautorepeat + return self._keyautorepeat - @keyReleaseAutoRepeat.setter - def keyReleaseAutoRepeat(self, val): - self._keyreleaseautorepeat = bool(val) + @keyAutoRepeat.setter + def keyAutoRepeat(self, val): + self._keyautorepeat = bool(val) def resizeEvent(self, event): w = event.size().width() @@ -374,6 +358,9 @@ def minumumSizeHint(self): return QtCore.QSize(10, 10) def _get_key(self, event): + if not self._keyautorepeat and event.isAutoRepeat(): + return + event_key = event.key() event_mods = int(event.modifiers()) # actually a bitmask From b3961400c81d0f5a9b201c3b8737ac5a070b058e Mon Sep 17 00:00:00 2001 From: "J. Goutin" Date: Sat, 16 Apr 2016 10:49:54 +0200 Subject: [PATCH 4/6] Update backend_qt4.py Key auto-repeat Off by default for QT4. --- lib/matplotlib/backends/backend_qt4.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 538c26a49475..377ff5717e2c 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -76,6 +76,9 @@ def __init__(self, figure): w, h = self.get_width_height() self.resize(w, h) + # Key auto-repeat disabled by default + self._keyautorepeat = False + def wheelEvent(self, event): x = event.x() # flipy so y=0 is bottom of canvas From 2ed95149767b7e981173172fe8ce5530c92aab68 Mon Sep 17 00:00:00 2001 From: "J. Goutin" Date: Sat, 16 Apr 2016 11:02:16 +0200 Subject: [PATCH 5/6] Update backend_qt5.py --- lib/matplotlib/backends/backend_qt5.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index c848fbf2aafb..d1653f71cb4f 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -359,7 +359,7 @@ def minumumSizeHint(self): def _get_key(self, event): if not self._keyautorepeat and event.isAutoRepeat(): - return + return None event_key = event.key() event_mods = int(event.modifiers()) # actually a bitmask From 973c28e10eba0b0ab4c3cf70b2ef024df65d161d Mon Sep 17 00:00:00 2001 From: "J. Goutin" Date: Sun, 1 May 2016 13:46:00 +0200 Subject: [PATCH 6/6] Update backend_qt4.py --- lib/matplotlib/backends/backend_qt4.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/backends/backend_qt4.py b/lib/matplotlib/backends/backend_qt4.py index 377ff5717e2c..a192d7c82b98 100644 --- a/lib/matplotlib/backends/backend_qt4.py +++ b/lib/matplotlib/backends/backend_qt4.py @@ -76,8 +76,8 @@ def __init__(self, figure): w, h = self.get_width_height() self.resize(w, h) - # Key auto-repeat disabled by default - self._keyautorepeat = False + # Key auto-repeat enabled by default + self._keyautorepeat = True def wheelEvent(self, event): x = event.x()