Mysql PYQT:qCombobox显示列;名称“;但要通过“列”;ID";

Mysql PYQT:qCombobox显示列;名称“;但要通过“列”;ID";,mysql,pyqt,pyqt4,qcombobox,Mysql,Pyqt,Pyqt4,Qcombobox,我一直在努力让它工作,但到目前为止还没有找到正确的路线。 我正在使用pyqt,我正在查询一个MySql数据库,从中收集一个包含所有列的模型。在这之前一切都很好 我创建了一个组合框,它使用model.setcolumn(1)显示正确的文本 我现在需要的是这个组合框在“激活”时发送这个记录的相对唯一ID,这样我就能够创建一个类别关系 做这件事的最佳方法是什么?我觉得我已经到了死胡同,任何帮助都将不胜感激 最好的, Cris最好的方法是对QComboBox进行分类。您不能覆盖激活的信号,但您可以创建一

我一直在努力让它工作,但到目前为止还没有找到正确的路线。 我正在使用pyqt,我正在查询一个MySql数据库,从中收集一个包含所有列的模型。在这之前一切都很好

我创建了一个组合框,它使用model.setcolumn(1)显示正确的文本 我现在需要的是这个组合框在“激活”时发送这个记录的相对唯一ID,这样我就能够创建一个类别关系

做这件事的最佳方法是什么?我觉得我已经到了死胡同,任何帮助都将不胜感激

最好的,
Cris

最好的方法是对QComboBox进行分类。您不能覆盖
激活的
信号,但您可以创建一个自定义信号,每当发出
激活的
信号时,该信号也将以ID发出。你可以连接到这个信号,做你自己的事情。它将是这样的:

类MyComboBox(QtGui.QComboBox):
activatedId=QtCore.pyqtSignal(int)#如果您的ID不是int,请更正此错误
def uuu init uuu(self,parent=None):
超级(MyComboBox,self)。\uuuu初始化(父级)
self.activated.connect(self.sendId)
@QtCore.pyqtSlot(int)
def sendId(自身,索引):
model=self.model()
uniqueIdColumn=0#如果ID在别处,则调整
uniqueId=model.data(model.createIndex(index,uniqueIdColumn,0),QtCore.Qt.DisplayRole)
self.activatedId.emit(uniqueId)
编辑 这是一个没有信号的类似版本。每当您使用组合框的
索引调用
sendId
时,这将返回
uniqueId

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

您好,非常感谢您的回复,我真的很感激。。我已经在代码中实现了这个类,我正在从激活的函数调用MyComboBox.sendId(index),但是我没有得到唯一的Id。我认为uniqueId=model.data(model.cre….我正在打印uniqueId,但我没有得到我的Id号…我在声明模型后也在尝试这个方法,看看它是否会返回一个值,但它没有这样做(替换为数字索引等).有什么想法吗?@user1028826:我想,你指的是信号/插槽关系。如果你想找一个常规的函数/方法,请参阅我的编辑。再次感谢Avaris的回复。这样做一开始似乎有点简单,但当我打印“uniqueID”时,我没有得到一个值,如果我打印了,我就得到了。难道没有更简单的方法从表或记录中获取单个字段吗?@user1028826:这是因为在Python2.x中,PyQt返回Qt类型变量。您可以通过调整v2类型API来实现。那么所有这些返回值都将是常规Python类型。或者只需使用
QVariant
函数相信
return uniqueId.toInt()
会奏效(当然,我假设你的ID是整数。如果不使用适合的函数)。但我建议使用v2 API方式。再次感谢你,如果你不告诉我关于v2 API的最后一点,我将永远无法达到目的。我非常感谢你的帮助。