[PyQt] newly introduced bug in PyQt 4.8.1 uic.loadUi
Paul Du Bois
dubois at doublefine.com
Mon Dec 6 01:24:06 GMT 2010
This change to PyQt4/uic/Loader/loader.py loadUi() breaks support for
file-like objects,
but uic.loadUi() is still documented as supporting them:
# Allow the filename to be a QString.
filename = str(filename)
return self.parse(filename, os.path.dirname(filename))
The use case for file-like objects is wrapping up apps via py2exe or
similar.
Here is an example of the problem:
>>> from PyQt4 import uic
>>> help(uic.loadUi)
Help on function loadUi in module PyQt4.uic:
loadUi(uifile, baseinstance=None)
loadUi(uifile, baseinstance=None) -> widget
Load a Qt Designer .ui file and return an instance of the user
interface.
uifile is a file name or file-like object containing the .ui file.
baseinstance is an optional instance of the Qt base class. If
specified
then the user interface is created in it. Otherwise a new instance
of the
base class is automatically created.
>>> import StringIO
>>> f = StringIO.StringIO("foo")
>>> uic.loadUi(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\python26\lib\site-packages\PyQt4\uic\__init__.py", line 185,
in loadUi
return DynamicUILoader().loadUi(uifile, baseinstance)
File "C:\python26\lib\site-packages\PyQt4\uic\Loader\loader.py", line
31, in loadUi
return self.parse(filename, os.path.dirname(filename))
File "C:\python26\lib\site-packages\PyQt4\uic\uiparser.py", line 817,
in parse
document = parse(filename)
File "C:\python26\lib\xml\etree\ElementTree.py", line 862, in parse
tree.parse(source, parser)
File "C:\python26\lib\xml\etree\ElementTree.py", line 579, in parse
source = open(source, "rb")
IOError: [Errno 22] invalid mode ('rb') or filename: '<StringIO.StringIO
instance at 0x00C87A08>'
More information about the PyQt
mailing list