当我从模型中读取它们时,项目从组合框中消失

时间:2014-01-16 10:07:08

标签: python pyqt4 qcombobox qstandarditemmodel qcheckbox

我有QComboBox并设置了QStandardItemModel,因为我需要多选复选框。 问题是当我读取文本值并检查comboBox中的项目状态时,它们会从组合中消失。

这就是我将模型设置为comboBox的方法:

areas = ["Area one", "Area two", "Area three", "Area four"]
model = QtGui.QStandardItemModel(4, 1)# 4 rows, 1 col
for i,area in enumerate(areas):
    item = QtGui.QStandardItem(area)
    item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
    item.setData(QtCore.Qt.Unchecked, QtCore.Qt.CheckStateRole)
    model.setItem(i, 0, item)
self.ui.comboBox.setModel(model)

这是我从comboBox读取数据的方式:

modelColumn = self.ui.comboBox.model().takeColumn(0)
for item in modelColumn:
   print item.text(),"---", item.checkState()

这是我从组合框中读取数据之前和之后的屏幕截图: enter image description here

...结果我得到了,正如所料:

Area one --- 0
Area two --- 2
Area three --- 2
Area four --- 0

另外,当comboBox处于非活动状态时我是否有简单的方法不显示“区域1”(我想在第二张图片上看到右边的箭头)或设置其他文字,如“选择区域”?

1 个答案:

答案 0 :(得分:0)

当然组合框变空了。实际上,您正在从模型中删除整个第0列:

来自Qt doc:

  

<强> takeColumn

     

删除给定列而不删除列项,并返回指向已删除项的指针列表。

由于此代码段(未经测试),您可能希望迭代您的商品:

rootItem = self.ui.comboBox.model().invisibleRootItem()
for rowNum in xrange(rootItem.rowCount()):
    item = rootItem.child(rowNum, 0)
    ...