[PyKDE] Lambda function call in connect statement
Aaron J. Ginn
aaron.ginn at motorola.com
Thu Mar 1 21:12:21 GMT 2001
Phil Thompson wrote:
> As lambda functions are supposed to be "syntactic sugar for a normal
> function definition" I don't see how using it helps you. Your function
> wouldn't be executed until the button click anyway.
If I write the connect statement without a lambda as follows:
----------------------------------------------------------------------
self.connect( self.top_struct_button, SIGNAL( "clicked()" ),
self.changeTopStruct(ver_obj))
----------------------------------------------------------------------
where changeTopStruct is
----------------------------------------------------------------------
def changeTopStruct(self, obj):
"""
Pops up an input dialog to prompt user for new top structure
name.
"""
ok_text_tuple = QInputDialog.getText( 'Change Top Structure',
'Enter new Top Structure',
None,None)
if ok_text_tuple[1] is 1 and ok_text_tuple[0] is not None:
obj.set_topstruct( ok_text_tuple[0] )
print obj.get_topstruct()
self.top_struct_value.setText( obj.get_topstruct() )
else:
return
----------------------------------------------------------------------
The QInputDialog widget in the called function is created before my top
QMainWindow that calls the function. As I recall from my work with
Tkinter, this is because the call from the connect statement is executed
immediately due to the parentheses in the self.changeTopStruct(ver_obj)
argument. I thought the only way to get around this is to use a lambda
function such as
self.connect( self.top_struct_button, SIGNAL( "clicked()" ),
lambda s=self,o=ver_obj:s.changeTopStruct(o))
This suppresses the creation of the QInputDialog box until the button is
pressed. Is there a better way to do this instead of using a lambda?
> However, I don't like segfaults - send me a small but complete script
> that demonstrates the problem and I'll take a look.
>
> Phil
Will do, but it will take me a little time to put something together.
--
Aaron J. Ginn Phone: 480-814-4463
Motorola SemiCustom Solutions Pager: 877-586-2318
1300 N. Alma School Rd. Fax : 480-814-4463
Chandler, AZ 85226 M/D CH260 mailto:aaron.ginn at motorola.com
More information about the PyQt
mailing list