[PyKDE] "sender" info in Python slot

Torsten Marek shlomme at gmx.net
Thu Nov 9 20:54:23 GMT 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jeremy Sanders schrieb:
> On Thu, 9 Nov 2006, Andreas Pakulat wrote:
> 
>> On 09.11.06 16:43:00, Sibylle Koczian wrote:
>>> hopefully the subject line isn't too misleading. This is my problem:
>>> I would like to connect the "clicked" signal of several buttons to
>>> one and the same function - but this function should know which
>>> button sent the signal. Example: one button to increase a value,
>>> another to decrease it, and one single function which adds '+1' or
>>> '-1' depending on the sending button. Or a row of buttons with a
>>> letter, and clicking one searches for all words beginning with this
>>> letter in a list.
>>>
>>> How can I do this? Subclassing QPushButton seems to be a possibility,
>>> but is there a simpler way?
>>
>> The unclean solution would be to use the sender() function, the proper
>> one is to have a look at QSignalMapper.
> 
> An alternative pythonic way to do this is to do something like:
> 
> class BoundCaller(object):
>     """A callable class to wrap a function and its arguments."""
>     def __init__(self, fn, *params):
>         self.fn = fn
>         self.params = params
>     def __call__(self, *params):
>         self.fn( *(self.params+params) )
> 
> in your class:
> 
>      def __init__(self):
>          self.myslot1 = BoundCaller(myslot, 1)
>          self.myslot2 = BoundCaller(myslot, 2)
> 
>          self.connect(self.mybutton, SIGNAL('clicked()'), self.myslot1)
>          ...
> 
>      def myslot(self, boundarg):
>          print boundarg
> 
> You have to keep a separate reference to the BoundCaller object (hence the
> assignment to self), otherwise it gets garbage collected.

Hi,

I still think that connect not taking a reference on the slot is a mistake,
otherwise you could just use a lambda here.

Anyhow,

Torsten

- --
Torsten Marek <shlomme at gmx.net>
ID: A244C858 -- FP: 1902 0002 5DFC 856B F146  894C 7CC5 451E A244 C858
Keyserver: subkeys.pgp.net

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFU5V/fMVFHqJEyFgRAgm/AJ9XDJFgK58BdarOPO/zgtGkBtWPcACfSAm5
m1HnJJC0t9hvSTzVgbBLnyo=
=b6n3
-----END PGP SIGNATURE-----




More information about the PyQt mailing list