Hi there,
I have a problem with PySide that tries to execute a function that does
not exist on an object.
First, some more explanation:
I have a special configuration that should be mentioned first. I use
PySide 1.0.5 that I compiled in 64 bit against Python 2.6 and Qt 4.5.3,
both also in 64 bit. To have a successful compilation I had to tweak
some entries in a couple of CMakeFile.txt and typesystem files. Problems
came from missing elements in Qt 4.5.3 like the QColor::Hsl and
QPixmapCache::Key.
I'm working inside Maya, a 3D software package, that has switched to Qt
4.5.3 in its version 2011. Now, there are two ways to build custom user
interfaces inside it, either with the built-in Python script module
which is pretty bad or with Python libraries like PyQt and PySide. I'm
working on a complex project with a couple of user interfaces. Now, with
the new possibilities of PySide, I would like to replace only some parts
of the existing interface that has been written with the built-in Python
module, so I do not need to rewrite everything from scratch.
I could find a way to convert existing widgets, that have been built in
Maya into PySide QWidgets (see the bug 902 of PySide buglist). This way
I was able to just replace parts of my existing user interface with
PySide QWidgets.
So far, it seemed to work well, but randomly I get following error:
AttributeError: 'PySide.QtGui.QWidget' object has no attribute 'invalidate'
Here's an extract of my code:
class ShotAssetIconBarWidget(QtGui.QWidget):
def __init__(self, parent):
super(ShotAssetIconBarWidget, self).__init__(parent)
self.__parent = parent
self.setGeometry(QtCore.QRect(0, 0, 150, 16))
self.setObjectName("ShotAssetIconBarWidget")
self.horizontalLayout = QtGui.QHBoxLayout(self)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0) # Here,
the error is thrown.
I cannot see any relationship between the setContentsMargins function of
the QHBoxLayout and the error message. If I remove the line, the error
is thrown a couple of lines later:
self.horizontalLayout.setObjectName("HorizontalLayout")
self.__assetIcon = QtGui.QLabel(self) # Here, the same error
gets thrown when I remove the error line above.
So, I investigated a little further and found following things:
* When I open a clean Maya and refresh multiple times my user
interface, everything seems to be stable until we reach a certain
amount of refreshments (between 400 and 500 times instantiated).
So I guess this call has to do with some cache or memory cleaning
that is called at some point.
* PySide tries to call the invalidate function on the parent QWidget
that I provide in the constructor. But this parent is a QWidget.
So why does PySide call the invalidate function on it that is a
function of a QLayout? When I dynamically add a "invalidate"
function that does nothing it works a little bit more until PySide
wants to call a "itemAt" function on the parent which is again a
function of QLayout but not of QWidget.
I don't know if anybody has an idea about this.
Thanks for any help!
Greets,
Carlo
_______________________________________________
PySide mailing list
[email protected]
http://lists.pyside.org/listinfo/pyside