Qt4Agg backend possible bug

Jorge Scandaliaris <jorgesmbox-ml@...83...> writes:

Hi,
I just mentioned this problem with Qt4Agg and python 3.4 in another thread
[1], but I decided to post it on a thread of its own, as I suspect it might
be a bug in the Qt4Agg backend.

I get a NameError exception (see backtrace below) when trying to use key
events in matplotlib (master branch rev:
e322d5f5bb024bbec44d3ba76da1bc16bf52af9c), python 3.4.1, and pyqt 4.10.
Is this a bug?

I can confirm that using chr() instead of unichr() fixes this problem. I
don't know how ones handle python2 vs python3 in these cases

diff --git a/lib/matplotlib/backends/backend_qt4.py
b/lib/matplotlib/backends/backend_qt4.py
index 70152aa..b0d8233 100644
--- a/lib/matplotlib/backends/backend_qt4.py
+++ b/lib/matplotlib/backends/backend_qt4.py
@@ -362,7 +362,7 @@ class FigureCanvasQT(QtGui.QWidget, FigureCanvasBase):
             if event_key > MAX_UNICODE:
                 return None

- key = unichr(event_key)
+ key = chr(event_key)
             # qt delivers capitalized letters. fix capitalization
             # note that capslock is ignored
             if 'shift' in mods:

jorge

You would use 'six' - https://pypi.python.org/pypi/six it is used by many packages including wxPython.

import six

if six.PY3:
  key = chr(event_key)

else:
  key = unichr(event_key)

Werner

···

On 6/5/2014 15:10, Jorge Scandaliaris wrote:

Jorge Scandaliaris <jorgesmbox-ml@...83...> writes:

Hi,
I just mentioned this problem with Qt4Agg and python 3.4 in another thread
[1], but I decided to post it on a thread of its own, as I suspect it might
be a bug in the Qt4Agg backend.

I get a NameError exception (see backtrace below) when trying to use key
events in matplotlib (master branch rev:
e322d5f5bb024bbec44d3ba76da1bc16bf52af9c), python 3.4.1, and pyqt 4.10.
Is this a bug?

I can confirm that using chr() instead of unichr() fixes this problem. I
don't know how ones handle python2 vs python3 in these cases

diff --git a/lib/matplotlib/backends/backend_qt4.py
b/lib/matplotlib/backends/backend_qt4.py
index 70152aa..b0d8233 100644
--- a/lib/matplotlib/backends/backend_qt4.py
+++ b/lib/matplotlib/backends/backend_qt4.py
@@ -362,7 +362,7 @@ class FigureCanvasQT(QtGui.QWidget, FigureCanvasBase):
              if event_key > MAX_UNICODE:
                  return None
  - key = unichr(event_key)
+ key = chr(event_key)
              # qt delivers capitalized letters. fix capitalization
              # note that capslock is ignored
              if 'shift' in mods:

Just for info.

I had never heard about six. Is there anything wrong using sys???:

import sys
if sys.version < "3.0":
     key = unichr(event_key)
else:
     key = chr(event_key)

Thanks,

Armando

···

On 05/06/2014 15:24, Werner wrote:

On 6/5/2014 15:10, Jorge Scandaliaris wrote:

Jorge Scandaliaris <jorgesmbox-ml@...83...> writes:

Hi,
I just mentioned this problem with Qt4Agg and python 3.4 in another thread
[1], but I decided to post it on a thread of its own, as I suspect it might
be a bug in the Qt4Agg backend.

I get a NameError exception (see backtrace below) when trying to use key
events in matplotlib (master branch rev:
e322d5f5bb024bbec44d3ba76da1bc16bf52af9c), python 3.4.1, and pyqt 4.10.
Is this a bug?

I can confirm that using chr() instead of unichr() fixes this problem. I
don't know how ones handle python2 vs python3 in these cases

diff --git a/lib/matplotlib/backends/backend_qt4.py
b/lib/matplotlib/backends/backend_qt4.py
index 70152aa..b0d8233 100644
--- a/lib/matplotlib/backends/backend_qt4.py
+++ b/lib/matplotlib/backends/backend_qt4.py
@@ -362,7 +362,7 @@ class FigureCanvasQT(QtGui.QWidget, FigureCanvasBase):
               if event_key > MAX_UNICODE:
                   return None
   - key = unichr(event_key)
+ key = chr(event_key)
               # qt delivers capitalized letters. fix capitalization
               # note that capslock is ignored
               if 'shift' in mods:

You would use 'six' - https://pypi.python.org/pypi/six it is used by
many packages including wxPython.

import six

if six.PY3:
  key = chr(event_key)

else:
  key = unichr(event_key)

...

You would use 'six' - https://pypi.python.org/pypi/six it is used by
many packages including wxPython.

import six

if six.PY3:
  key = chr(event_key)

else:
  key = unichr(event_key)

Just for info.

I had never heard about six. Is there anything wrong using sys???:

import sys
if sys.version < "3.0":
      key = unichr(event_key)
else:
      key = chr(event_key)

Thanks,

Using 'six' for just the above case is definitely overkill, but it has many more goodies in it to make py2/py3 single source code easier.

Werner

···

On 6/5/2014 15:45, "V. Armando Sol�" wrote: