[PyKDE] Lambda function call in connect statement

Aaron J. Ginn aaron.ginn at motorola.com
Mon Mar 5 17:09:53 GMT 2001


Phil Thompson wrote:
> 
> 
> Sorry - I should have noticed this right at the start...
> 
> The problem is that you are not keeping a reference to the function
> object that lambda returns - so it is getting garbage collected
> immediately. The signal is them emitted to an object that no longer
> exists, hence the segfault. Change the code to be something like...
> 
>         self.lam = lambda s=self,x=num:s.changeTopStruct(x)
>         self.connect( self.top_struct_button, SIGNAL( "clicked()" ),
>                       self.lam )
> 
> QObject.connect does not keep a reference to the slot object to avoid
> (potential) hidden circurlar references - but it does mean that you have
> to manage them yourself.
> 
> The weakreferences module in Python 2.1 looks interesting - it might
> offer a more programmer friendly solution.
> 
> Phil

Great!  This works.  I had a feeling the problem was that I was using
lambda incorrectly.

-- 
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