2012-09-11 7 views
4

에서 나는의 9 번째 열에서 체크 박스를 넣어 코드를 다음을 사용 내 tableQtTableWidget입니다 QTableWidgetPyQt는 : 체크 박스 QTableWidget

chkBoxItem = QtGui.QTableWidgetItem() 
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) 
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)  
table.setItem(rowNo,9,chkBoxItem) 

. 체크 박스를 클릭 한 행을 목록에 추가해야합니다. 어떻게 이것을 달성합니까?

종류, 안부 할

+0

방금 ​​각 행에 대해 상태를 저장하는 목록 속성을 만들려고 있나요? 아니면 재산? 아니면'chkBoxItem'의'clicked '신호를 적절한 방법으로 연결하는 데 문제가 있습니까? –

답변

8

한 가지 방법은 다음과 같습니다

  1. 가에 클릭 된 항목의 checkedState를 핸들러에 테이블의 itemClicked 신호를 연결

  2. 테스트 처리기

  3. 항목이 선택되어 있으면 row을 li 일

예제 코드 :

from PyQt4 import QtGui, QtCore 

class Window(QtGui.QWidget): 
    def __init__(self, rows, columns): 
     QtGui.QWidget.__init__(self) 
     self.table = QtGui.QTableWidget(rows, columns, self) 
     for column in range(columns): 
      for row in range(rows): 
       item = QtGui.QTableWidgetItem('Text%d' % row) 
       if row % 2: 
        item.setFlags(QtCore.Qt.ItemIsUserCheckable | 
            QtCore.Qt.ItemIsEnabled) 
        item.setCheckState(QtCore.Qt.Unchecked) 
       self.table.setItem(row, column, item) 
     self.table.itemClicked.connect(self.handleItemClicked) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.table) 
     self._list = [] 

    def handleItemClicked(self, item): 
     if item.checkState() == QtCore.Qt.Checked: 
      print('"%s" Checked' % item.text()) 
      self._list.append(item.row()) 
      print(self._list) 
     else: 
      print('"%s" Clicked' % item.text()) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window(6, 3) 
    window.resize(350, 300) 
    window.show() 
    sys.exit(app.exec_()) 
+0

버튼이 있으면 모두 선택하고 어떻게 구현할 수 있습니까? –

관련 문제