Hi all.

I'm working on a PyQt-based application. I decided to load ui files dynamically 
using uic.loadUi function and it just worked since my last PyQt4 upgrade (I was 
using PyQt4 4.7.3). With 4.7.7 I notice the following error while attempting to 
load a ui file:
...
 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/__init__.py",
 line 181, in loadUi
   return DynamicUILoader().loadUi(uifile, baseinstance)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/Loader/loader.py",
 line 24, in loadUi
   return self.parse(filename, QtCore.QFileInfo(filename).path())

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 842, in parse
   actor(elem)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 689, in createUserInterface
   self.traverseWidgetTree(elem)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 667, in traverseWidgetTree
   handler(self, child)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 403, in createLayout
   self.traverseWidgetTree(elem)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 667, in traverseWidgetTree
   handler(self, child)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 446, in handleItem
   self.traverseWidgetTree(elem)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 667, in traverseWidgetTree
   handler(self, child)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 403, in createLayout
   self.traverseWidgetTree(elem)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 667, in traverseWidgetTree
   handler(self, child)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 446, in handleItem
   self.traverseWidgetTree(elem)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 667, in traverseWidgetTree
   handler(self, child)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 163, in createWidget
   self.stack.push(self.setupObject(widgetClass(elem), parent, elem))

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/uiparser.py",
 line 136, in setupObject
   self.wprops.setProperties(obj, branch)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/properties.py",
 line 365, in setProperties
   prop_value = self.convert(prop, widget)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/properties.py",
 line 330, in convert
   return func(prop[0], **args)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/properties.py",
 line 158, in _iconset
   return self.icon_cache.get_icon(prop)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/icon_cache.py",
 line 30, in get_icon
   iset = _IconSet(iconset, self._base_dir)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/icon_cache.py",
 line 63, in __init__
   self._fallback = self._file_name(iconset.text, base_dir)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyQt4/uic/icon_cache.py",
 line 87, in _file_name
   fname = os.path.join(base_dir, fname)

 File 
"/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/posixpath.py",
 line 67, in join
   elif path == '' or path.endswith('/'):

AttributeError: 'QString' object has no attribute 'endswith'

(on my mac)

and:
...
 File "C:\Python26\lib\site-packages\PyQt4\uic\__init__.py", line 181, in loadUi
   return DynamicUILoader().loadUi(uifile, baseinstance)

 File "C:\Python26\lib\site-packages\PyQt4\uic\Loader\loader.py", line 25, in 
loadUi
   return self.parse(filename, QtCore.QFileInfo(filename).path())

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 843, in parse
   actor(elem)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 689, in 
createUserInterface
   self.traverseWidgetTree(elem)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 667, in 
traverseWidgetTree
   handler(self, child)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 403, in 
createLayout
   self.traverseWidgetTree(elem)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 667, in 
traverseWidgetTree
   handler(self, child)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 446, in 
handleItem
   self.traverseWidgetTree(elem)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 667, in 
traverseWidgetTree
   handler(self, child)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 403, in 
createLayout
   self.traverseWidgetTree(elem)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 667, in 
traverseWidgetTree
   handler(self, child)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 446, in 
handleItem
   self.traverseWidgetTree(elem)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 667, in 
traverseWidgetTree
   handler(self, child)

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 163, in 
createWidget
   self.stack.push(self.setupObject(widgetClass(elem), parent, elem))

 File "C:\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 136, in 
setupObject
   self.wprops.setProperties(obj, branch)

 File "C:\Python26\lib\site-packages\PyQt4\uic\properties.py", line 365, in 
setProperties
   prop_value = self.convert(prop, widget)

 File "C:\Python26\lib\site-packages\PyQt4\uic\properties.py", line 330, in 
convert
   return func(prop[0], **args)

 File "C:\Python26\lib\site-packages\PyQt4\uic\properties.py", line 158, in 
_iconset
   return self.icon_cache.get_icon(prop)

 File "C:\Python26\lib\site-packages\PyQt4\uic\icon_cache.py", line 30, in 
get_icon
   iset = _IconSet(iconset, self._base_dir)

 File "C:\Python26\lib\site-packages\PyQt4\uic\icon_cache.py", line 63, in 
__init__
   self._fallback = self._file_name(iconset.text, base_dir)

 File "C:\Python26\lib\site-packages\PyQt4\uic\icon_cache.py", line 87, in 
_file_name
   fname = os.path.join(base_dir, fname)

 File "C:\Python26\lib\ntpath.py", line 97, in join
   if path[-1] in "/\\":

TypeError: 'in <string>' requires string as left operand, not QString

(on Windows XP virtual machine)

They're different errors but probably both of them are cause by the following 
code lines (from PyQt4.uic.Loader.loader):
...
   def loadUi(self, filename, toplevelInst=None):
       self.toplevelInst = toplevelInst

       # By using QFileInfo.path() rather than os.path.dirname() we allow
       # QString file names.
       return self.parse(filename, QtCore.QFileInfo(filename).path())

In 4.7.3 there was only a parameter into the parse method, but in this new 
version, the second parameter (a QString) is used for various operations 
related to os.path python standard module (that require str).

In my case, replace the last row with the following, just works:
        return self.parse(filename, unicode(QtCore.QFileInfo(filename).path()))

I don't know if this can break other parts of uic. Tell me if I'm doing 
something wrong :)

-- 
Lorenzo Berni, Develer s.r.l. - R&D team
[ http://www.develer.it - http://www.bertos.org ]

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to