[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