Reputation: 5392
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 :
connect("A_Signal", lambda <signal_parameters> : instance_b.manage_signal)
from a method of A_Class instance => we can't even enter in function manage_signal of instance_b (for example : connect("activate", lambda menu_item : instance_b.manage_signal)
connect("A_Signal", lambda <signal_parameters> : self.manage_signal)
=> this time it works ?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
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