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

Reply via email to