diff options
Diffstat (limited to 'examples2/table.py')
-rwxr-xr-x | examples2/table.py | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/examples2/table.py b/examples2/table.py new file mode 100755 index 0000000..58fd04b --- /dev/null +++ b/examples2/table.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +import sys +from qt import * + +class Table(QTableView): + def __init__(self, numRows, numCols, parent=None, name=''): + QTableView.__init__(self, parent, name) + self.curRow = self.curCol = 0 + self.setFocusPolicy(QWidget.StrongFocus) + self.setBackgroundMode(QWidget.PaletteBase) + self.setNumCols(numCols) + self.setNumRows(numRows) + self.setCellWidth(100) + self.setCellHeight(30) + self.setTableFlags(Tbl_vScrollBar | + Tbl_hScrollBar | + Tbl_clipCellPainting) + self.resize(400,200) + self.contents = [''] * (numRows * numCols) + + def cellContent(self, row, col): + return self.contents[self.indexOf(row,col)] + + def setCellContent(self, row, col, c): + self.contents[self.indexOf(row,col)] = c + self.updateCell(row, col) + + def paintCell(self, p, row, col): + w = self.cellWidth(col) + h = self.cellHeight(row) + x2 = w-1 + y2 = h-1 + + p.drawLine(x2,0,x2,y2) + p.drawLine(0,y2,x2,y2) + + if row == self.curRow and col == self.curCol: + if self.hasFocus(): + p.drawRect(0, 0, x2, y2) + else: + p.setPen(Qt.DotLine) + p.drawRect(0, 0, x2, y2) + p.setPen(Qt.SolidLine) + + p.drawText(0,0,w,h,Qt.AlignCenter,self.contents[self.indexOf(row,col)]) + + def mousePressEvent(self, me): + oldRow = self.curRow + oldCol = self.curCol + clickedPos = me.pos() + self.curRow = self.findRow(clickedPos.y()) + self.curCol = self.findCol(clickedPos.x()) + if self.curRow != oldRow or \ + self.curCol != oldCol: + self.updateCell(oldRow, oldCol) + self.updateCell(self.curRow, self.curCol) + + def keyPressEvent(self, ke): + oldRow = self.curRow + oldCol = self.curCol + edge = 0 + key = ke.key() + if key == Key_Left: + if self.curCol > 0: + self.curCol = self.curCol - 1 + edge = self.leftCell() + if self.curCol < edge: + self.setLeftCell(edge-1) + elif key == Key_Right: + if self.curCol < self.numCols()-1: + self.curCol = self.curCol + 1 + edge = self.lastColVisible() + if self.curCol >= edge: + self.setLeftCell(self.leftCell()+1) + elif key == Key_Up: + if self.curRow > 0: + self.curRow = self.curRow - 1 + edge = self.topCell() + if self.curRow < edge: + self.setTopCell(edge-1) + elif key == Key_Down: + if self.curRow < self.numRows()-1: + self.curRow = self.curRow + 1 + edge = self.lastRowVisible() + if self.curRow >= edge: + self.setTopCell(self.topCell()+1) + else: + ke.ignore() + return + + if self.curRow != oldRow or \ + self.curCol != oldCol: + self.updateCell(oldRow, oldCol) + self.updateCell(self.curRow, self.curCol) + + def focusInEvnet(self, fie): + self.updateCell(self.curRow, self.curCol) + + def focusOutEvent(self, foe): + self.updateCell(self.curRow, self.curCol) + + def indexOf(self, row, col): + return (row * self.numCols()) + col + +numRows = 20 +numCols = 20 +a = QApplication(sys.argv) +v = Table(numRows, numCols) +for i in range(numRows): + for j in range(numCols): + v.setCellContent(i,j,'%d %c' % (j, 65+(i%26))) +a.setMainWidget(v) +v.show() +a.exec_loop() |