[PyQt] PyQT Dynamic Signal Handling

Sebastian Köln sebk at rynx.org
Wed May 14 04:57:53 BST 2014


Hallo Marc,

first the solution:
http://pastebin.com/22yM60Lm

The issues that I found with you code are:
QSignalMapper::mapped is an overloaded signal. Thus PyQt picks one (it appears 
to be the int version) and connects that. This does not work, as you are 
providing a string. (To connect the right signal, see [1].)

Now you are attempting to connect the  QSignalMapper::mapped signal to your 
pyqtSignal Handler.button_map, which has no signature. So again PyQt does not 
know, which signal to connect (and raises an error).
> TypeError: connect() failed between mapped(int) and button_map()

The smallest change from your code is to add the signature to button_map by 
writing
>	button_map = QtCore.pyqtSignal(str)
and connecting the correct signal from thesignalMapper
> 	self.signalMapper.mapped[str].connect(self.button_map) 

You could also directly connect that to your channel_clicked method as I have 
done in link above.


greetings, Sebastian

[1] 
http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html#connecting-disconnecting-and-emitting-signals


> Hey all!
> 
> I've been developing an app using PyQT for a few months now and I've run
> into a stumbling block. I hope that it is alright to ask support questions
> on this mailing list. If it is not, just let me know and I'll look for
> another support medium.
> 
> Basically, I have an array that I want to create buttons out of.  I need to
> do it dynamically, as the array can and will change frequently.  I've come
> across QSignalMapper and believe it will do exactly what I need, however
> after getting all the code written out, the buttons generate but do not
> appear to emit any signals that are being recognized by my handler. I've
> linked [1] the relavent code below as a pastebin.
> 
> Thanks for any help you guys can provide!
> 
> 
> [1] http://pastebin.com/qXfB1FZz


More information about the PyQt mailing list