I've tried to connect an instance method as a new-style signal callback. This works if I do nothing else, but if I happen to call a numpy method after connecting the callback, I get an error from PyQt, but during the numpy call:

Traceback (most recent call last):
  File "signal_bug.py", line 30, in <module>
    main()
  File "signal_bug.py", line 24, in main
    nqo = NotQObject(slider)
  File "signal_bug.py", line 14, in __init__
    a = numpy.arange(10).max()
TypeError: NotQObject cannot be converted to PyQt4.QtCore.QObject in this 
context


There are some places in numpy where we check to see if anyone has set an exception. I suspect that what is happening is that PyQt is checking if the "self" on the bound instancemethod callback is a QObject in order to go down one path and otherwise go down another and failing to clear up this exception before returning control. I am using PyQt4 4.5 on OS X and trunk numpy, but I suspect any numpy will do. I am downloading 4.5.2 now to see if this has been fixed in the meantime, but I do not see anything in the changelog that looks promising.


import sys

from PyQt4 import QtGui
import numpy


class NotQObject(object):
    """ Definitely not a QObject.
    """
    def __init__(self, slider):
        self.slider = slider
        self.slider.valueChanged.connect(self.on_value_changed)

        a = numpy.arange(10).max()

    def on_value_changed(self, ival):
        print ival


def main():

    app = QtGui.QApplication(sys.argv)
    slider = QtGui.QSlider()
    nqo = NotQObject(slider)

    app.exec_()


if __name__ == '__main__':
    main()


--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

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

Reply via email to