Лучшим способом будет подкласс QComboBox
.Вы не можете переопределить сигнал activated
, но вы можете создать собственный сигнал, который также будет передаваться с идентификатором при каждом излучении activated
.И вы можете подключиться к этому сигналу и делать свои вещи.Это будет примерно так:
class MyComboBox(QtGui.QComboBox):
activatedId = QtCore.pyqtSignal(int) #correct this if your ID is not an int
def __init__(self, parent=None):
super(MyComboBox, self).__init__(parent)
self.activated.connect(self.sendId)
@QtCore.pyqtSlot(int)
def sendId(self, index):
model = self.model()
uniqueIdColumn = 0 # if ID is elsewhere adjust
uniqueId = model.data(model.createIndex(index,uniqueIdColumn,0),QtCore.Qt.DisplayRole)
self.activatedId.emit(uniqueId)
Редактировать Вот аналогичная версия без сигналов.Это вернет uniqueId
всякий раз, когда вы звоните sendId
с index
в выпадающем списке.
class MyComboBox(QtGui.QComboBox):
def __init__(self, parent=None):
super(MyComboBox, self).__init__(parent)
def sendId(self, index):
model = self.model()
uniqueIdColumn = 0 # if ID is elsewhere adjust
uniqueId = model.data(model.createIndex(index,uniqueIdColumn,0),QtCore.Qt.DisplayRole)
return uniqueId