[PyQt] pyQT -python beginner question - combo box signal function call

C. B. Esquire crackerbunny at gmail.com
Sat Apr 23 02:51:22 BST 2011


Perhaps use the currentIndex() method on the combobox inside your
changeValue function ...


def changeValue(self, value):
    mc = self.canvas
    layer = mc.currentLayer()
    obj= layer.selectedFeatureIds()
    layer.changeAttributeValue(
int(obj[0], *yourComboBox.currentIndex()*, value)


You can also use a not very highly recommend way, with lambda, however it
sucks for garbage cleanup, it's sloppy python,and you will no longer get
your QString passed.... off the top of my head it would be something like
....

QObject.connect(comboBoxNew[dropbox_counter],SIGNAL("currentIndexChanged(QString)"),
lambda: self.changeValue(self, dropbox_counter))


On Fri, Apr 22, 2011 at 8:07 PM, karsten vennemann <karsten at terragis.net>wrote:

>  I have a dynamic data entry from to which I am adding combo boxes on he
> fly using lists
>
>   # here I add labels and combo boxes to the form from a list ..
>
> self.dlg.ui.streamEditCustomFormLayout.addWidget(comboBoxNewLabel[dropbox_counter])
>
> self.dlg.ui.streamEditCustomFormLayout.addWidget(comboBoxNew[dropbox_counter])
>
> # and then add a signal to trigger updating of the attribute in a table with
> the value selected in the combo box via the changeValue function
>
> QObject.connect(comboBoxNew[dropbox_counter],SIGNAL("currentIndexChanged(QString)"),self.changeValue)
>
> the function I have works but so is set to change always attribute column 2
> (in *bold*)
>
>     def changeValue(self, value):
>         mc = self.canvas                  # the map cabavs uin QGIS
>         layer = mc.currentLayer()      # a layer in QGIS
>         ob = layer.selectedFeaturesIds()
>         layer.changeAttributeValue(int(ob[0]),*2*,value)  # Change value
> for colum 2
>
> How can I add one additional parameter to the function call form the combo
> box ?
>
>
> Something like
>
>  QObject.connect(comboBoxNew[dropbox_counter],SIGNAL("currentIndexChanged(QString)"),self.changeValue(self,
> dropbox_counter))
>
>     def changeValue(self, value, colum_id):
>         mc = self.canvas
>         layer = mc.currentLayer()
>         ob = layer.selectedFeaturesIds()
>         layer.changeAttributeValue(int(ob[0]),colum_id,value)
>
>
> but with this I am getting
> QObject.connect(comboBoxNew[dropbox_counter],SIGNAL("currentIndexChanged(QString)"),self.changeValue(self,
> dropbox_counter))
> TypeError: arguments did not match any overloaded call:
>   QObject.connect(QObject, SIGNAL(), QObject, SLOT(),
> Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type
> 'NoneType'
>   QObject.connect(QObject, SIGNAL(), callable,
> Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type
> 'NoneType'
>   QObject.connect(QObject, SIGNAL(), SLOT(),
> Qt.ConnectionType=Qt.AutoConnection): argument 2 has unexpected type 'str'
>
> How can this be done correctly ?
> Karsten
>
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20110423/af12aa5f/attachment.html>


More information about the PyQt mailing list