2017-09-27 29 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의 할당을 수정하는 것이 매우 쉽기 때문에 특히 성가신 일입니다. (예 :'udims = [ "here", "goes", "some", "items"]'); 'model = QStandardItemModel (len (items), 1)'(예 :'model = QStandardItemModel (len (udims), 1)')을 수정하십시오. 'item = QStandarItem (udim)'(typo) 수정; 'QApplication()'의 인스턴스를 추가하십시오. 나는 PyQt5에서 (로컬)이 모든 작업을 수행했다. Btw. 내 PyQt5 "포트"에도 확인란이 표시되지 않았습니다. – Scheff

+0

설명하는 동작 (체크 박스 없음, 마우스 오버 선택 없음) 저는 (Cygwin, python3, PyQt5) 내 편에서 본 적이 있습니다. [SO : CheckBox의 ComboBox?] (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)