On Saturday 20 January 2007 16:03, borntonetwork wrote: > David, thanks for your help. Unfortunately, all attempts of making this > solution work have failed. I would be interested to know if anyone has > used QSignalMapper successfully in a similar situation.
Looking again at what you originally wrote, and looking at your solution below, I don't think it's really appropriate to use a QSignalMapper for this purpose. (That's what I understood from the signature of the deleteProductIngredient() method you had in your original code.) What you appear to want is a way of being notified about state changes to widgets that also identifies the individual widget that changed. You can do that by connecting the individual widgets to the same slot and call sender() to find out which object emitted the signal; for example: # ... for idx in range(1, maxIngredients+1): wName = 'chkProductIngredientsDelete_'+str(idx) w = self.__dict__[wName] self.connect(w, QtCore.SIGNAL("stateChanged(int)"), self.deleteProductIngredient) def deleteProductIngredient(self, state): """Delete a product ingredient.""" print self.sender(), "changed state to", state What QSignalMapper does is collect signals from different objects, assigning an ID to each of them, and emits a single signal with an ID whenever it receives a signal from one of those objects. In other words, it allows the actions of a group of objects to be described by a parameter but discards the signal's arguments. It's most useful for things like collections of push buttons where you only need to know that they were clicked. > For any interested, I worked around the problem using a closure, > which seems a bit cleaner from a coding point of view, although > I don't have any idea if it is more efficient or not: [...] > Each iteration then created a new function based on the closure: [...] It's good to know that you got something working in the end. There's also another solution that involves QSignalMapper, but it may not make the resulting code any simpler. David -- http://mail.python.org/mailman/listinfo/python-list