为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐4208626 2022-06-28 17:27:37
通常我将组合框数据设置如下: 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 数据值。
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

正如文档指出的那样:


无效 QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())

使用给定的文本将项目添加到组合框中,并包含指定的 userData(存储在Qt::UserRole中)。该项目被附加到现有项目的列表中。


userData 与Qt::UserRole角色相关联,因此您必须使用该角色(或更大的角色)。


考虑到上述情况,我创建了以下示例:


import sys

from PyQt4 import QtCore, QtGui



if __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_())


查看完整回答
反对 回复 2022-06-28
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信