如何在pyqt中从模型中设置组合框数据

通常我将组合框数据设置如下: cbo.addItem("xyz",QVariant(1))-- xyz 是 cbo 中显示的值,1 是它的数据


我正在从 pyqt 模型设置可检查的 cbo 值,如下所示:


model = QtGui.QStandardItemModel(len(cases_array), 1)

for index, case in enumerate(cases_array): 

    item = QtGui.QStandardItem(case[1])

    item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)

    item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)

    model.setItem(index, 0, item)

cbo.setModel(model)

它工作得很好。但是当我这样做时,cbo.itemData(0).toPyObject()我没有得到任何价值。


如何设置 cbo 数据值。


慕姐4208626
浏览 93回答 1
1回答

Cats萌萌

正如文档指出的那样:无效 QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())使用给定的文本将项目添加到组合框中,并包含指定的 userData(存储在Qt::UserRole中)。该项目被附加到现有项目的列表中。userData 与Qt::UserRole角色相关联,因此您必须使用该角色(或更大的角色)。考虑到上述情况,我创建了以下示例:import sysfrom PyQt4 import QtCore, QtGuiif __name__ == "__main__":    app = QtGui.QApplication(sys.argv)    cases_array = [        ("text1", "data1"),        ("text2", "data2"),        ("text3", "data3"),        ("text4", "data4"),    ]    cbo = QtGui.QComboBox()    model = QtGui.QStandardItemModel(0, 1)    for index, (text, data) in enumerate(cases_array):        item = QtGui.QStandardItem(text)        item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)        item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)        item.setData(data, QtCore.Qt.UserRole)        model.appendRow(item)    cbo.setModel(model)    def on_current_index_changed(index):        text = cbo.itemText(index)        data = cbo.itemData(index, QtCore.Qt.UserRole)        check_state = cbo.itemData(index, QtCore.Qt.CheckStateRole)        print(index, text, data, check_state)    cbo.currentIndexChanged[int].connect(on_current_index_changed)    cbo.show()    sys.exit(app.exec_())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python