loloof64
loloof64

Reputation: 5392

Connecting signal with lambda does not work in some cases?

i'm experimenting pygtk programms development, with python 2.7, and i have a little problem when connecting signals using a lambda function :

So, here my problem: I don't understand why :

Here some code to be more explicit

   class A_Class(gtk.Window):

       def __init__(self):
           super(gtk.Window, self).__init__()
           self.__instance_b = B_Class()
           # this does not work and i don't understand why
           self.connect("delete-event", lambda the_widget,the_event: self.__instance_b.manage_event)
           # this works
           self.connect("delete-event", self.__manage_event)

       def __manage_event(self):
           self.__instance_b.manage_event

   class B_Class(object):

        def manage_event(self):
            # do some stuffs ...

Regards

Upvotes: 0

Views: 1556

Answers (1)

Frédéric Hamidi
Frédéric Hamidi

Reputation: 262969

Your lambda expression should call the handler function instead of returning it:

self.connect("delete-event", lambda the_widget, the_event: \
    self.__instance_b.manage_event(the_widget, the_event))

Of course, as you said, this is unneeded because it's equivalent to:

self.connect("delete-event", self.__instance_b.manage_event)

The lambda would only end up relaying the signal arguments to manage_event(), something that connect() can perfectly do by itself.

Upvotes: 1

Related Questions