Hi there,

me again.
I just did a test with PyQt, and I do not have any issue. So, I guess, it is really linked to a problem in PySide and not Qt or my code. Unfortunately, I cannot reproduce the problem with a simple interface. I'll keep you posted.

Greets,
Carlo

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

_______________________________________________
PySide mailing list
[email protected]
http://lists.pyside.org/listinfo/pyside

Reply via email to