Python 组合框内不可见复选框

Python 组合框内不可见复选框,python,pyqt,pyside,qcombobox,qcheckbox,Python,Pyqt,Pyside,Qcombobox,Qcheckbox,我需要我的组合框项目是由用户检查,以便他们可以选择多个项目。我已经看到了一些关于stackoverflow的解决方案。我把它应用到我的代码中。它做了一些事情,但复选框还不可见,我还不能选择任何项目 我的代码如下 from PySide.QtGui import * from PySide.QtCore import * udims = [here goes some items] cmb = QComboBox() model = QStandardItemModel(len(udims),

我需要我的组合框项目是由用户检查,以便他们可以选择多个项目。我已经看到了一些关于stackoverflow的解决方案。我把它应用到我的代码中。它做了一些事情,但复选框还不可见,我还不能选择任何项目

我的代码如下

from PySide.QtGui import *
from PySide.QtCore import * 

udims = [here goes some items]
cmb = QComboBox()
model = QStandardItemModel(len(udims), 1)
for i, udim in enumerate(udims):
    item = QStandardItem(udim)
    item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
    item.setData(Qt.Checked | Qt.CheckStateRole)
    model.setItem(i, 0, item)

cmb.setModel(model)

我能够通过为复选框创建QItemDelegate的子类,然后将其插入到combobox的ItemDelegate中来实现这一点

from PySide.QtCore import *
from PySide.QtGui import *

class CheckBoxDelegate(QItemDelegate):
    def __init__(self, parent=None):
        super(CheckBoxDelegate, self).__init__(parent)

    def createEditor(parent, op, idx):
        self.editor = QCheckBox(parent)


udims = ['1001', '1002', '1003', '1004']
cmb = QComboBox()
delegate = CheckBoxDelegate()
cmb.setItemDelegate(delegate)
model = QStandardItemModel(len(udims), 1)
for i, udim in enumerate(udims):
    item = QStandardItem(udim)
    item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
    item.setData(Qt.Checked | Qt.CheckStateRole)
    model.setItem(i, 0, item)

cmb.setModel(model)

此示例代码不是一个示例代码。这很烦人,因为创建一个udims非常容易(尤其是在Python中):请修复
udims
的赋值(例如
udims=[“这里”、“去了”、“一些”、“项目”]
);固定
model=QStandardItemModel(len(items),1)
(例如
model=QStandardItemModel(len(udims),1)
);固定
项=QStandarItem(udim)
(打字);添加
QApplication()
的实例。我在PyQt5中(本地)完成了所有这些,并使其运行。顺便说一句,我在PyQt5“端口”中也没有看到复选框。您描述的行为(没有复选框,没有悬停选择)我也在我这边看到过(cygwin、python3、PyQt5)。看一看。可能是,您必须使用项委托技巧使其可见。顺便说一句,我相信
item.setData(Qt.Checked | Qt.CheckStateRole)
:它不应该是
item.setData(Qt.Checked,Qt.CheckStateRole)
(即
而不是
)?ItemDelegate技巧解决了我的问题。