2009-05-11 7 views
9

QListView를 표시하려면 각 항목이 일부 레이블이있는 체크 상자 여야합니다. 확인란은 항상 표시되어야합니다. 내가 생각할 수있는 한 가지 방법은 사용자 지정 대리자와 QAbstractListModel을 사용하는 것입니다. 더 간단한 방법이 있습니까? 이 작업을 수행하는 가장 간단한 미리보기를 제공 할 수 있습니까? 사전에PyQt의 체크 박스 목록보기

덕분에

답변

10

당신이 당신의 자신의 모델을 작성하는 경우, 단지 flags() 방법의 반환 값의 Qt.ItemIsUserCheckable 플래그를 포함하고 data() 방법에서 Qt.CheckStateRole에 대한 유효한 값을 반환 할 수 있도록 .

당신이 QStandardItemModel 클래스를 사용하는 경우

, 당신은 각 항목의 setFlags() 방법에 전달할들에 Qt.ItemIsUserCheckable 플래그를 포함, 그 setData() 방법으로 Qt.CheckStateRole에 대한 검사 상태를 설정합니다. 대화 형 파이썬 세션에서

다음을 입력 :

from PyQt4.QtGui import * 

model = QStandardItemModel() 
item = QStandardItem("Item") 
item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) 
item.setData(QVariant(Qt.Checked), Qt.CheckStateRole) 
model.appendRow(item) 

view = QListView() 
view.setModel(model) 
view.show() 
21

은 내가 PyQt는 메일 링리스트에 David Boddie에서 제공하는 방법을 사용하여 끝났다.

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 
from random import randint 


app = QApplication(sys.argv) 

model = QStandardItemModel() 

for n in range(10):     
    item = QStandardItem('Item %s' % randint(1, 100)) 
    check = Qt.Checked if randint(0, 1) == 1 else Qt.Unchecked 
    item.setCheckState(check) 
    item.setCheckable(True) 
    model.appendRow(item) 


view = QListView() 
view.setModel(model) 

view.show() 
app.exec_() 

참고 : 여기에 자신의 코드를 기반으로 작업 조각입니다 setCheckState에 체크 역할 setData의 전화를 변경하는 대신 플래그 setCheckable을 사용했다.

+1

해당 항목/체크 박스를 토글 할 때 어떤 신호가 방출됩니까? – marcin

+3

에 대한 답을 얻으려면 다음과 같이 'model.itemChanged'를 사용할 수 있습니다. http://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/ – marcin