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

Reply via email to