Thanks for all the input I received 

I found one seemingly good solution (via internet search) that works using
functools.partial  that is available since python 2.5
http://docs.python.org/library/functools.html#functools.partial

My code is then
...
from functools import partial
...

QObject.connect(comboBoxNew[dropbox_counter],SIGNAL("currentIndexChanged(QSt
ring)"),partial(self.changeValue, x = dropbox_counter))

    def changeValue(self, value, x):                  
        mc = self.canvas                              
        layer = mc.currentLayer()                     
        ob = layer.selectedFeaturesIds()              
        layer.changeAttributeValue(int(ob[0]),x,value)

Hopefully that helps someone else too when trying to easily pass an
additional parameter  from an QT signal slot ...

Karsten 

_______________________

From: C. B. Esquire [mailto:[email protected]] 
Sent: Friday, April 22, 2011 18:51
To: karsten vennemann
Subject: Re: [PyQt] pyQT -python beginner question - combo box signal
function call



        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(QSt
ring)"), lambda: self.changeValue(self, dropbox_counter))
        
        
        
        
        On Fri, Apr 22, 2011 at 8:07 PM, karsten vennemann
<[email protected]> 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_co
unter])
        
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(QSt
ring)"),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(QSt
ring)"),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(QSt
ring)"),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    [email protected]
                http://www.riverbankcomputing.com/mailman/listinfo/pyqt
                



_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to