2012-09-11 81 views
4

我用下面的代碼放在一個複選框在第九列我QTableWidgetPyQt的:複選框在QTableWidget的

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

哪裏table是我QtTableWidget。我需要添加複選框被點擊的行到一個列表..我如何實現這一目標?

親切的問候,做

+0

您是否嘗試過只是做一個列表屬性保管狀態的每一行?或者一個屬性?或者你有問題連接你'chkBoxItem'的'clicked'信號到適當的方法? –

回答

8

的一種方式將是:

  1. 表的​​信號連接到處理器

  2. 測試被點擊項目的checkedState在處理器

  3. 如果項目被選中,則將其row添加到li ST

示例代碼:

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

如果有按鈕說全選,那麼我們該怎麼實現呢? –