On Wednesday 24 September 2003 8:02 am, Derek Fountain wrote: > This might be a general Python newbie question. But it's confusing me in a > PyQt context. :o) > > I have a slot in a class which receives a list of images. It adds that list > to it's existing list, then sends off a signal saying the existing list has > changed: > > currentImageList = [] > def slotInsertImages( self, imageList ): > self.currentImageList.extend( imageList ) > self.emit( PYSIGNAL("signalUpdateImageList"), self.currentImageList > ) > > This doesn't work. I get an error saying: > > TypeError: Argument 2 of QObject.emit() has an invalid type > > Changing the "self.currentImageList" to "(self.currentImageList,)" makes it > work. > > On the other end of that signal is a slot which looks like this: > > def slotUpdateImageList( self, imageList ): > print "update image list" > for file in imageList: > print file > > Which also works. :o) > > What I don't understand is why I need to force the currentImageList into a > tuple with one item - that item being my list of image names. What is > received at the other end is clearly a list since I can loop over it. It > feels like the slot should have to take the first index of its 'imageList' > argument, but that's clearly not the case. > > What's going on? What does the self.emit() method actually do with it's > second argument?
Interprets it as an argument list (so it has to be a tuple) and calls the slot with those arguments. An example with two arguments might make it clearer... self.emit( PYSIGNAL("signalUpdateImageList"), (self.currentImageList, flag)) def slotUpdateImageList( self, imageList, flag ): Should emit() take a variable number of arguments rather than a single tuple? Maybe, but it's too late to change now. Phil _______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde