[PyQt] Python3 PyQt Resources bug

Algis Kabaila akabaila at pcug.org.au
Tue Jun 28 12:53:21 BST 2011


Hi,

Attempting to move to Python3 turned up a problem with resource compilation 
and/or installation into program.  In my multi-partition box there are two 
kubuntu 11.04 "natty" os's.  Their names according to the desktop images are
"Red Leaves" for Python3
"Winter Swans" for Python2
The same small script with tiny resource file runs ok on "Winter Swans", but 
fails to compile resources into the program on "Red Leaves".

Here are the two compilation/running dialogs:

On the Red Leave
================
pyhon 3.2
sip  4.12.3
qt   4.7.2
pyqt 4.8.4


menu.qrc
--------
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file alias="hi.png">icons/address-book-new.png</file>
<file alias="quit.png">icons/no.png</file>
</qresource>
</RCC>

compiling
---------
ak at supremo:/dat/work/py2/menubar$ pyrcc4 menu.qrc -o qrc_menu.py
ak at supremo:/dat/work/py2/menubar$ python3 menu_r.py
Traceback (most recent call last):
  File "menu_r.py", line 7, in <module>
    import qrc_menu
  File "/dat/work/py2/menubar/qrc_menu.py", line 269, in <module>
    qInitResources()
  File "/dat/work/py2/menubar/qrc_menu.py", line 264, 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'
ak at supremo:

On the "Winter Swans"
=====================
OS ubuntu 10.10 upgraded to 11.04 "natty"
python 2.7.1+
pyqt  4.8.3
qt    4.7.2

ak at supremo:/dat/work/py2/menubar$ pyrcc4 menu.qrc -o qrc_menu.py
ak at supremo:/dat/work/py2/menubar$ python2.7 menu_r.py
QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: No such 
file or directory
QFileSystemWatcher: failed to add paths: /home/ak/.config/ibus/bus
ak at supremo:/dat/work/py2/menubar$ 

The gui works ok.

The script is listed below

****************
*#!/usr/bin/python3
# menu_r.py - menu bar with resources.
 
import sys
from PyQt4 import QtGui

import qrc_menu

class MainWindow(QtGui.QMainWindow):
#    def __init__(self):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
#        QtGui.QMainWindow.__init__(self)        
        self.resize(300,200)
        self.setWindowTitle('Menu and tool bar.')
        exit = QtGui.QAction(QtGui.QIcon(':/quit.png'),'Exit', self)
        exit.setShortcut('Ctrl+Q')
        exit.setStatusTip('Exit application')
#        
self.connect(exit,QtCore.SIGNAL('triggered()'),QtCore.SLOT('close()'))
        exit.triggered.connect(self.close)
        toolBar = self.addToolBar('tools')
        toolBar.addAction(exit)
        self.centralwidget = QtGui.QWidget(self)
        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
        self.plainTextEdit = QtGui.QPlainTextEdit(self.centralwidget)
        self.gridLayout.addWidget(self.plainTextEdit, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self, self.centralwidget)
        self.statusBar()
        menubar = self.menuBar()
        file = menubar.addMenu('&File')
        file.addAction(exit)

        sayHiAction = QtGui.QAction(QtGui.QIcon(':/hi.png'), 'Greet them!', 
self)
        sayHiAction.setStatusTip('Say Hi')
        toolBar.addAction(sayHiAction)
        file.addAction(sayHiAction)        
        sayHiAction.triggered.connect(self.sayHi)

    def sayHi(self):
        self.plainTextEdit.setPlainText('Hi Pete, hi world!')
        # setPlainText(text) clears the plainTextEdit window and puts fresh 
text.
        self.plainTextEdit.appendPlainText('Peace to all people of good 
will!')

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
*************
The PyQt compiled with python3.2 works fine, other than the problem with 
resources. My knee jerk reaction is that the error is likely to be in the 
script pyrcc4, though that is only a guess.

I would greatly appreciate any and all advice.  There is no burning urgency 
for me, because it is quite possible to test the scripts with reading the icon 
files directly, as was done in the original listing.  However, this is *not 
really* satisfactory as moving the directory with all files to a different 
location does cause problems "vanishing icons".

OldAl.


More information about the PyQt mailing list