如何从填充了QSqlTableModel的QComboBox中获取选择项目数据

时间:2014-04-20 17:27:55

标签: python pyqt qcombobox qsqltablemodel

我有一个基本的组合框,其中填充了sqlite3数据库表中的数据:

self.langModel = QSqlTableModel(self)
self.langModel.setTable("languages")
self.langModel.setSort(self.langModel.fieldIndex("label"), Qt.AscendingOrder)
self.langModel.select()

...

self.comboLangs = QComboBox()
self.comboLangs.setModel(self.langModel)
self.comboLangs.setModelColumn(self.langModel.fieldIndex("label"))
self.layout.addRow("Language", self.comboLangs)

...

self.btnAdd = QPushButton("Add")
self.btnAdd.clicked.connect(self.addLoc)
self.btnLayout.addWidget(self.btnAdd)

...

def addLoc(self):
    pprint(vars(self.langModel.data(self.langModel.index(self.comboLangs.currentIndex(), self.langModel.fieldIndex("iso")))))

以下是表架构:

CREATE TABLE languages ( 
    id    INTEGER PRIMARY KEY NOT NULL,
    iso   TEXT    NOT NULL,
    label TEXT    NOT NULL 
);

这只会产生一个空字典{}。如何从QSqlTableModel获取所选/当前项目的数据对象?

1 个答案:

答案 0 :(得分:4)

好的想通了(我希望PyQt参考文档对如何做到这一点有点具体)。无论如何,要获取模型数据,我需要将QVariant对象转换为Python对象(toPyObject())或tring(toString())。

print self.langModel.data(self.langModel.index(self.comboLangs.currentIndex(), self.langModel.fieldIndex("iso"))).toString()

这让我得到了我需要的数据。