Python 如何从pyqt中的模型设置组合框数据
通常我设置组合框数据如下:Python 如何从pyqt中的模型设置组合框数据,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,通常我设置组合框数据如下: 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(QtC
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数据值
谢谢正如文件所指出的: void QComboBox::addItem(常量QString和text,常量QVariant &userData=QVariant()) 使用给定文本向组合框中添加一个项目,并包含 指定的用户数据(存储在中)。该项目已附加 添加到现有项目的列表中 userData与角色关联,因此您必须使用该角色(或更大的角色) 考虑到上述情况,我创建了以下示例:
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_())
正如文件指出的那样: void QComboBox::addItem(常量QString和text,常量QVariant &userData=QVariant()) 使用给定文本向组合框中添加一个项目,并包含 指定的用户数据(存储在中)。该项目已附加 添加到现有项目的列表中 userData与角色关联,因此您必须使用该角色(或更大的角色) 考虑到上述情况,我创建了以下示例:
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_())