On Fri, May 14, 2010 at 2:39 PM, Tony S Yu <ton...@mit.edu> wrote: > I'm running the Qt4 backend, and I noticed that I'd frequently get error > messages saying I was pressing unrecognized keys. It turns out that the > direction keys aren't recognized in the qt4 backend. (I'm using direction > keys to switch between spaces in OSX, so this error gets triggered quite > frequently) > > One possible fix is to just add the direction keys to the list of valid keys > (see patch below). Alternatively, the key event code could just ignore > unrecognized keys (i.e. `key == None`). This change could be made in > FigureCanvasQT.keyPressEvent (in backends.backend_qt4.py) or, more generally, > in FigureCanvasBase.key_press_event (in backend_bases.py). > > -Tony > > %---Diff > > Index: lib/matplotlib/backends/backend_qt4.py > =================================================================== > --- lib/matplotlib/backends/backend_qt4.py (revision 8315) > +++ lib/matplotlib/backends/backend_qt4.py (working copy) > @@ -129,6 +129,10 @@ > keyvald = { QtCore.Qt.Key_Control : 'control', > QtCore.Qt.Key_Shift : 'shift', > QtCore.Qt.Key_Alt : 'alt', > + QtCore.Qt.Key_Up : 'up', > + QtCore.Qt.Key_Right : 'right', > + QtCore.Qt.Key_Down : 'down', > + QtCore.Qt.Key_Left : 'left', > } > # left 1, middle 2, right 3 > buttond = {1:1, 2:3, 4:2} > > > %---Full traceback > > Traceback (most recent call last): > File "/Users/Tony/python/devel/mpl/lib/matplotlib/backends/backend_qt4.py", > line 198, in keyPressEvent > FigureCanvasBase.key_press_event( self, key ) > File "/Users/Tony/python/devel/mpl/lib/matplotlib/backend_bases.py", line > 1459, in key_press_event > self.callbacks.process(s, event) > File "/Users/Tony/python/devel/mpl/lib/matplotlib/cbook.py", line 169, in > process > func(*args, **kwargs) > File "/Users/Tony/python/devel/mpl/lib/matplotlib/backend_bases.py", line > 2079, in key_press > if event.key in fullscreen_keys: > TypeError: 'in <string>' requires string as left operand, not NoneType
I can commit the change to backend_qt4, but I need to run the change to backendbases by the other devs. Is there any reason not to do the following?: =================================================================== --- lib/matplotlib/backend_bases.py (revision 8306) +++ lib/matplotlib/backend_bases.py (working copy) @@ -1,4 +1,3 @@ - """ Abstract base classes define the primitives that renderers and graphics contexts must implement to serve as a matplotlib backend @@ -1450,9 +1449,11 @@ def key_press_event(self, key, guiEvent=None): """ - This method will be call all functions connected to the + This method will call all functions connected to the 'key_press_event' with a :class:`KeyEvent` """ + if key is None: + return self._key = key s = 'key_press_event' event = KeyEvent(s, self, key, self._lastx, self._lasty, guiEvent=guiEvent) ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel