[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