passing tuple with pyqt4 signal/slot mechanism

Phil Thompson phil at riverbankcomputing.co.uk
Thu Apr 26 10:36:20 EDT 2007


On Thursday 26 April 2007 3:16 pm, Pradnyesh Sawant wrote:
> Hello,
> I have a pyqt4 code in which i'm trying the signal/slot mechanism. The
> (stripped) code is as follows:
>
> class D(QtCore.QThread):
>     def __init__(self):
>         QtCore.QThread.__init__(self)
>         tpl = ("Primary", "priSec")
>         print "tpl:", tpl
>         self.emit(QtCore.SIGNAL("setLabel"), tpl)
> class Gui(QtGui.QDialog):
>     def __init__(self, parent = None):
>         QtGui.QDialog.__init__(self, parent)
>     def setLabel(self, tpl):
>         print "####tpl:", tpl
>         print "**********tpl:", str(tpl)
>         return
> if __name__ == "__main__":
>     app = QtGui.QApplication(sys.argv)
>     dialog = Gui()
>     d = D()
>     QtCore.QObject.connect(d, QtCore.SIGNAL("setLabel"),
>             dialog.setLabel, QtCore.Qt.QueuedConnection)
>     sys.exit(dialog.exec_())
>
> The output i'm getting is as follows:
>
> tpl: ('Primary', 'priSec')
> ####tpl: (<refcnt 0 at 0xb7caac8c>,)
> **********tpl: ((((((((<NULL>,),),),),),),),)
>
> Can anyone kindly tell me what's happening here? Why is the tuple
> ("Primary", "priSec") getting converted to this <NULL> thingy? And
> what is this thingy anyways (It looks to be a deeply nested tuple, but
> am not sure).

Works for me in that the setLabel() isn't executed at all - but then you are 
emitting the signal before connecting it. Also my crystal ball isn't telling 
me what versions you are using or what platform you are on.

Phil



More information about the Python-list mailing list