- 论坛徽章:
- 0
|
回复 1# liaozd
网上找了一下,但是还是不是很明确原理,和如何得到哪些row是checked的?- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- import sys
- my_array = [['00','01','02'],
- ['10','11','12'],
- ['20','21','22']]
- def main():
- app = QApplication(sys.argv)
- w = MyWindow()
- w.show()
- sys.exit(app.exec_())
- class MyWindow(QWidget):
- def __init__(self, *args):
- QWidget.__init__(self, *args)
- tablemodel = MyTableModel(my_array, self)
- tableview = QTableView()
- tableview.setModel(tablemodel)
- layout = QVBoxLayout(self)
- layout.addWidget(tableview)
- self.setLayout(layout)
- class MyTableModel(QAbstractTableModel):
- def __init__(self, datain, parent=None, *args):
- QAbstractTableModel.__init__(self, parent, *args)
- self.arraydata = datain
- self._checked=[False for i in xrange(self.rowCount(self))]
- print self._checked
- def rowCount(self, parent):
- return len(self.arraydata)
- def columnCount(self, parent):
- return len(self.arraydata[0])
- def flags(self, index):
- if not index.isValid():
- return
- elif index.column() == 0:
- return Qt.ItemIsEnabled|Qt.ItemIsUserCheckable
- return Qt.ItemIsSelectable|Qt.ItemIsEditable|Qt.ItemIsEnabled
-
- def data(self, index, role):
- if not index.isValid():
- return QVariant()
- elif role == Qt.DisplayRole:
- return QVariant(self.arraydata[index.row()][index.column()])
- elif index.column() == 0 and role==Qt.CheckStateRole:
- return self._checked[index.row()]
- return None # what this for? I am not sure.
- def setData(self, index, value, role):
- if not index.isValid() or role!=Qt.CheckStateRole:
- return False
- elif index.column()==0:
- self._checked[index.row()]=value
- self.dataChanged.emit(index, index)
- print self._checked
- return True
- if __name__ == "__main__":
- main()
复制代码 |
|