2009-10-30 6 views
0

대기열에서 사람들의 이름 목록을 가져오고 각 사람마다 addWidget() 함수를 사용하여 이름이있는 확인란을 QGridLayout에 배치하려고합니다. 항목을 QListView에 성공적으로 배치 할 수 있지만 새로운 행을 만드는 것이 아니라 서로 위에 씁니다. 누구든지이 문제를 해결할 수있는 방법에 대한 의견이 있습니까?Python PyQT4 - QGridLayout에 알 수없는 QComboBox 위젯 추가하기

self.chk_People = QtGui.QListView() 
items = self.jobQueue.getPeopleOffQueue() 

for item in items: 
    QtGui.QCheckBox('%s' % item, self.chk_People) 

self.jobQueue.getPeopleOffQueue는() 같은 반환 [ '밥', '샐리', '지미'] 그 도움이된다면.

답변

1

에게이 줄 서브 클래 싱 할 필요없이 setFlags()setData(QVariant(bool, Qt::CheckStateRole)를 사용할 수 있습니다

QtGui.QCheckBox('%s' % item, self.chk_People) 

목록보기에있는 확인란을 추가하지 않습니다, 그것은 단지로 목록보기로를 생성 부모님, 그리고 큰 차이가 있습니다.

목록보기를 사용하는 가장 간단한 방법은 QListWidget 편의 클래스입니다. 이를 위해 QListWidgetItem의 인스턴스로 확인란을 만든 다음 목록 위젯에서 addItem을 사용하여 실제로 추가 할 수 있습니다.

그리드 레이아웃에 추가하는 데 문제가 있습니까? 일반적으로 체크 박스의 크기가 작 으면 그리드 레이아웃이 더 좋을 수 있습니다.이 레이아웃은 앱을 어떻게 보이게 할 것인지에 달려 있습니다. 그러나 그러한 객체가 많은 경우 목록 위젯 /보기가 가장 좋습니다.

+0

대단히 감사합니다. –

0

PyQt에서 해결책을 말할 수는 없지만 따라야하는 구조는 다음과 같습니다. QListView는 필요한 것을 할 수 있으므로, 별도의 체크 박스를 만들 필요가 없습니다. 확인란을 포함하는 여분의 열을 추가 columncount() 방법,Qt::ItemIsUserCheckable을 포함하여 적절한 플래그를 반환하는 flags() 메소드를 오버라이드 (override) (당신이 원하는 방법을 코딩 정도에 따라 다름)와 data 방법 QAbstractItemModel 또는 QStandardItemModel의 서브 클래스를 생성 확인란을 표시 할 열에 대해 에 대해 Qt::Checked, Qt::Unchecked의 선택 상태를 반환합니다.

QListWidget을 사용하면 데이터를 추가 할 때 QListWidgetItem을 사용할 수 있으며 모델을 만들 필요가 없습니다. QListWidgetItem에 당신이 모델