[PyQt] Question about the new Signals / Slots mechanism.

Thomas Mansencal thomas.mansencal at gmail.com
Mon Jan 31 18:33:04 GMT 2011


Hello,

I wanted to update my code to use the new Signals / Slots mechanism but I'm
running into some troubles that I don't manage to understand.

Here is the snippet that I use :

import inspect

import functools

import sys

from PyQt4 import QtGui, QtCore


> def getArgs(object_):

return inspect.getargspec(object_).args


> def executionTrace(object_):

def function(*args, **kwargs):

print "*" * 96

print object_

print args, kwargs

print getArgs(object_)

value = object_(*args, **kwargs)

return value

return function


> class Buttons(QtGui.QWidget):

def __init__(self, parent=None):

QtGui.QWidget.__init__(self, parent)


> self.setWindowTitle("Buttons")


> a_Button = QtGui.QPushButton("A", self)

a_Button.setGeometry(0, 0, 60, 30)

a_Button.clicked.connect(self.doStuff)


> b_Button = QtGui.QPushButton("B", self)

b_Button.setGeometry(0, 30, 60, 30)

b_Button.clicked.connect(lambda: self.doStuff())


> c_Button = QtGui.QPushButton("C", self)

c_Button.setGeometry(0, 60, 60, 30)

self.connect(c_Button, QtCore.SIGNAL('clicked()'), self.doStuff)


> @executionTrace

def doStuff(self):

stuff("1", "2", "3", "4")


> def stuff(a, b, c, d):

pass


> app = QtGui.QApplication(sys.argv)

qb = Buttons()

qb.show()

sys.exit(app.exec_())


executionTrace is decorating the doStuff method, now I'm launching the app
and I click the buttons in the A, B, C order and here is what I get :

Button A : Failing but that's the way I would have done it ( Notice the
False argument that is coming from I don't know where :| )

>
> ************************************************************************************************

<function doStuff at 0x023731F0>

(<__main__.Buttons object at 0x01FDCB28>, False) {}

Traceback (most recent call last):

  File "D:\Datas\Personal\Developement\Others\src\Tests.py", line 15, in
> function

    value = object_(*args, **kwargs)

TypeError: doStuff() takes exactly 1 argument (2 given)

['self']



Button B : Working but I still don't know why.

>
> ************************************************************************************************

<function doStuff at 0x023731F0>

(<__main__.Buttons object at 0x01FDCB28>,) {}

['self']



Button C : Working, and the way I was doing it before.

>
> ************************************************************************************************

<function doStuff at 0x023731F0>

(<__main__.Buttons object at 0x01FDCB28>,) {}

['self']


If someone wanna shed some light on that, I'll be very happy :)

Thanks,

Thomas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20110131/e9fa4294/attachment-0001.html>


More information about the PyQt mailing list