[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: Re: [PyQt] pyQT -python beginner question - combo box signal
From: "karsten vennemann" <karsten () terragis ! net>
Date: 2011-04-23 2:19:21
Message-ID: 4E5ABDB2A83E48558416CB8DD967149E () snuggie
[Download RAW message or body]
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:crackerbunny@gmail.com]
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
<karsten@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_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 PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic