2017-09-27 7 views
0

複数のアイテムを選択できるように、コンボボックスの項目をチェック可能にする必要があります。私はstackoverflowのいくつかのソリューションを見てきました。私は自分のコードにそれを適用しました。それは何かしましたが、チェックボックスはまだ表示されていないので、まだ項目を選択することはできません。私は、その後、チェックボックスのためにQItemDelegateのサブクラスを作成するコンボボックスのアイテムデリゲートにそのを差し込むことによって、この作業を取得することができましたComboBox内にCheckBoxが表示されない

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) 
+0

このサンプルコードは[MCVE](http://stackoverflow.com/help/mcve)ではありません。これは、(udims = ["here"、 "goes"、 "some"、 "items"] 'などの)udimsの割り当てを修正してください。 'model = QStandardItemModel(len(udims)、1)'); 'model = QStandardItemModel(len(items)、1)'を修正します。 'item = QStandarItem(udim)'(typo)を修正してください。 'QApplication()'のインスタンスを追加してください。私はPyQt5でこれを(ローカルで)実行し、実行させました。 Btw。 PyQt5の「ポート」にチェックボックスが表示されませんでした。 – Scheff

+0

私が(cygwin、python3、PyQt5)私の側でも見たことがあるあなたが記述する動作(チェックボックスなし、ホバー選択なし)。 [SO:CheckBoxのコンボボックス?](https://stackoverflow.com/a/20118475/7478597)をご覧ください。おそらく、それらを表示させるためにアイテムデリゲートトリックを使用する必要があります。 Btw。 'item.setData(Qt.Checked | Qt.CheckStateRole)'に別のタイプミスがあると思います: 'item.setData(Qt.Checked、Qt.CheckStateRole)'(つまり** '、' ** ** '|' **)の代わりに? – Scheff

+0

ItemDelegateトリックが私の問題を解決しました。 – Vicspidy

答えて

1

を次のように

私のコードです。

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) 
関連する問題