[PyQt] Python 3 import error

Thorsten Kampe thorsten at thorstenkampe.de
Thu Dec 2 12:17:22 GMT 2010


* Hans-Peter Jansen (Thu, 2 Dec 2010 12:49:17 +0100)
> On Thursday 02 December 2010, 12:24:54 Thorsten Kampe wrote:
> > I'm trying to port a PyQt4 application from Python 2 to Python 3.
> > The application works fine with the latest Python 2 (2.7.1) but not
> > with Python 3.1.2:
> >
> > Traceback (most recent call last):
> >   File "my_application.pyw", line 10, in <module>
> >     import resource.ui
> >   File "F:\[path]\resource\ui.py", line 84, in <module>
> >     import resource_rc
> > ImportError: No module named resource_rc
> >
> > This is the directory structure:
> > |-- my_application.pyw*  (main application, "import resource.ui")
> >
> > `-- resource/
> >
> >     |-- __init__.py      (package file to enable module import)
> >     |-- resource_rc.py   (generated by pyrcc4)
> >
> >     `-- ui.py            (generated by pyuic4, "import resource_rc")
> >
> > I couldn't find any documentation regarding changes between the
> > latest Python 2 and 3. Who knows what's going on and what I can do?!
> 
> Did you recreated the resources with pyrcc4 -py3? It might be necessary 
> to supply a --from-imports argument to pyuic4, as python3 did changed 
> its import behavior (relative imports, etc..).

Okay, this is what I get after adding "--from-imports":

Traceback (most recent call last):
  File "my_application.pyw", line 10, in <module>
    import resource.ui
  File "F:\[path]\resource\ui.py", line 89, in <module>
    from . import resource_rc
  File "F:\[path]\resource\resource_rc.py", line 70627,
in <module>
    qInitResources()
  File "F:\[path]\resource\resource_rc.py", line 70622,
in qInitResources
    QtCore.qRegisterResourceData(0x01, qt_resource_struct, 
qt_resource_name, qt_resource_data)
TypeError: qRegisterResourceData(int, str, str, str): argument 2 has 
unexpected type 'str'

So the ImportError is gone. Adding -py3 to pyrcc4 yields:
Traceback (most recent call last):
  File "my_application.pyw", line 63, in <module>
    mainWin       = MainWindow()
  File "my_application.pyw", line 19, in __init__
    self.restoreGeometry(settings.value('Geometry').toByteArray())
AttributeError: 'QByteArray' object has no attribute 'toByteArray'

So the error is now in the main file. The actual line is

    self.restoreGeometry(settings.value('Geometry').toByteArray())

(...taken from Mark Summerfield's book "Rapid GUI Programming with 
Python and Qt: The Definitive Guide to PyQt Programming").

Interestingly the same UI and resource file still run fine in Python 2 
:-/


Thorsten



More information about the PyQt mailing list