[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyQt] KeyPressEvent and Table
From:       Christophe BAL <projetmbc () gmail ! com>
Date:       2013-03-16 9:03:41
Message-ID: CAAb4jGkQsKoS5KnNG7wvyMTprW4v_U8ATcQVwLMJC4E3D99Q4Q () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hello,
I would like to act before the change of the content of one cell in a
table. To do that I have made all the cells not editable, and I have tried
to use the *keyevent* method. This does not work : only the enter key is
recognized.

Indeed, I would to act if A is pressed, without changing the content of the
cell, and also to change the content only if one digit is pressed. What is
the good way to do that ? I've put one minimal not working code just after.

One precision : some celle cannot be changed (this is for a sudoku).

Best regards.
Christophe BAL



*==== THE CODE ====*
*
*
*#! /usr/bin/env python2.7*
*# -*- coding: utf-8 -*-*
*
*
*# Source :
http://www.developpez.net/forums/d1281788/autres-langages/python-zope/gui/pyside-pyqt/coquille-vide-sudoku/#post7181230
                
*
*
*
*from __future__ import division*
*
*
*import sys*
*from copy import deepcopy*
*
*
*from PySide import QtCore, QtGui*
*
*
*def cellColor(painter, option, color):*
*    """*
*    ???*
*    """*
*    r = option.rect*
*    x, y, w, h = r.x() + 1, r.y() + 1, r.width()-2, r.height()-2*
*
*
*    if isinstance(color, (str, unicode)):*
*        color = QtGui.QColor(color)*
*
*
*    elif isinstance(color, (list, tuple)):*
*        if len(color) == 3:*
*            r, g, b = color*
*            alpha   = 255*
*
*
*        else:*
*            r, g, b, alpha = color*
*
*
*        color = QtGui.QColor(r, g, b, alpha)*
*
*
*    painter.fillRect(x, y, w, h, color)*
*
*
*def cellBorder(painter, option, where):*
*    """*
*    ???*
*    """*
*    r = option.rect*
*    x, y, w, h = r.x(), r.y(), r.width(), r.height()*
*
*
*    if where == 'up':*
*        x1, y1, x2, y2 = x, y, x + w, y*
*
*
*    elif where == 'bottom':*
*        x1, y1, x2, y2 = x + w, y + h, x, y + h*
*
*
*    elif where == 'right':*
*        x1, y1, x2, y2 = x + w, y, x + w, y + h*
*
*
*    elif where == 'left':*
*        x1, y1, x2, y2 = x, y + h, x, y*
*
*
*    else:*
*        return None*
*
*
*    pen = QtGui.QPen()*
*    pen.setWidth(4)*
*    painter.setPen(pen)*
*    painter.drawLine(x1, y1, x2, y2)*
*
*
*
*
*class SudokuDelegate(QtGui.QItemDelegate):*
*    def __init__(self, parent=None):*
*        super(SudokuDelegate, self).__init__(parent)*
*
*
*    def initGrid(self, grid):*
*        self.grid_0 = grid*
*
*
*    def paint(self, painter, option, index):*
*        """*
*        ???*
*        """*
*        row, col = index.row(), index.column()*
*
*
*        if row == 0 or row == 3 or row == 6:*
*            if col in[0,3,6]:*
*                cellBorder(painter, option, 'left')*
*                cellBorder(painter, option, 'up')*
*
*
*            elif col == 8:*
*                cellBorder(painter, option, 'right')*
*                cellBorder(painter, option, 'up')*
*
*
*            else:*
*                cellBorder(painter, option, 'up')*
*
*
*        elif row in [1,2,4,5,7]:*
*            if col in [0,3,6]:*
*                cellBorder(painter, option, 'left')*
*
*
*            elif col == 8:*
*                cellBorder(painter, option, 'right')*
*
*
*        elif row == 8:*
*            if col in[0,3,6]:*
*                cellBorder(painter, option, 'left')*
*                cellBorder(painter, option, 'bottom')*
*
*
*            elif col == 8:*
*                cellBorder(painter, option, 'right')*
*                cellBorder(painter, option, 'bottom')*
*
*
*            else:*
*                cellBorder(painter, option, 'bottom')*
*
*
*# Background color for initial known cells*
*        if self.grid_0[row][col]!=0:*
*            cellColor(painter, option, [200,200,200])*
*
*
*        QtGui.QItemDelegate.paint(self, painter, option, index)*
*
*
*class MainWindow(QtGui.QWidget):*
*    def __init__(*
*        self,*
*        parent = None*
*    ):*
*        super(MainWindow, self).__init__(parent)*
*
*
*# General grid*
*        self.table = QtGui.QTableWidget(self)*
*        self.nbrow, self.nbcol = 9, 9*
*        self.table.setRowCount(self.nbrow)*
*        self.table.setColumnCount(self.nbcol)*
*
*
*# Each cell has dimension 50 pixels x 50 pixels*
*        for row in range(0, self.nbrow):*
*            self.table.setRowHeight(row, 50)*
*
*
*            for col in range(0, self.nbcol):*
*                self.table.setColumnWidth(col, 50)*
*
*
*# Each cell contains one single QTableWidgetItem*
*        for row in range(0, self.nbrow):*
*            for col in range(0, self.nbcol):*
*                item = QtGui.QTableWidgetItem()*
*                item.setTextAlignment(*
*                    QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter*
*                )*
*
*
*                self.table.setItem(row, col, item)*
*
*
*# Header formatting*
*        font = QtGui.QFont()*
*        font.setFamily(u"DejaVu Sans")*
*        font.setPointSize(12)*
*        self.table.horizontalHeader().setFont(font)*
*        self.table.verticalHeader().setFont(font)*
*
*
*# Font used*
*        font = QtGui.QFont()*
*        font.setFamily(u"DejaVu Sans")*
*        font.setPointSize(20)*
*        self.table.setFont(font)*
*
*
*# Global Size*
*        self.resize(60*9, 60*9 + 20)*
*
*
*# Layout of the table*
*        layout = QtGui.QGridLayout()*
*        layout.addWidget(self.table, 0, 0)*
*        self.setLayout(layout)*
*
*
*# Initial grid (to test)*
*        self.grid_0 =  [*
*            [0,0,0, 0,2,0, 9,0,1],*
*            [0,0,0, 0,0,0, 0,0,3],*
*            [0,8,0, 3,0,0, 4,5,0],*
*#*
*            [0,4,7, 0,0,5, 0,8,0],*
*            [0,0,0, 0,0,0, 0,0,0],*
*            [0,2,0, 9,0,0, 7,4,0],*
*#*
*            [0,9,5, 0,0,2, 0,3,0],*
*            [6,0,0, 0,0,8, 0,0,0],*
*            [7,0,4, 0,6,0, 0,0,0]*
*        ]*
*
*
*# Use of the delegate so to use thicker lines.*
*        self.delegate = SudokuDelegate(self.table)*
*        self.table.setItemDelegate(self.delegate)*
*        self.delegate.initGrid(self.grid_0)*
*
*
*# Initialization of the actual grid*
*        self.grid = deepcopy(self.grid_0)*
*
*
*# Display the grid.*
*        self.update(self.grid)*
*
*
*# Set the focus in the first cell*
*        self.table.setFocus()*
*        self.table.setCurrentCell(0, 0)*
*
*
*    def update(self, g):*
*        for row in range(0, len(g[0])):*
*            for col in range(0, len(g)):*
*                if g[row][col] == 0:*
*                    font = QtGui.QFont()*
*                    font.setFamily(u"DejaVu Sans")*
*                    font.setPointSize(12)*
*                    self.table.item(row, col).setFont(font)*
*
*
*                    color = QtGui.QColor(0, 0,  255, 255) # bleu*
*                    self.table.item(row, col).setForeground(color)*
*
*
*                    self.table.item(row, col).setText(*
*                        u"1 2 3\n4 5 6\n7 8 9"*
*                    )*
*                    self.table.item(*
*                        row, col*
*                    ).setFlags(*
*                        QtCore.Qt.ItemIsEnabled*
*                        | QtCore.Qt.ItemIsSelectable*
*#                        | QtCore.Qt.ItemIsEditable*
*                    )*
*
*
*                else:*
*                    self.table.item(row, col).setText(unicode(g[row][col]))
*
*                    self.table.item(*
*                        row, col*
*                    ).setFlags(*
*                        QtCore.Qt.ItemIsEnabled*
*                        | QtCore.Qt.ItemIsSelectable*
*                    )*
*
*
*# Just for testing !*
*        color = QtGui.QColor(160, 255, 160, 255) # Light green*
*        self.table.item(2, 4).setBackground(color)*
*
*
*        color = QtGui.QColor(255, 160, 160, 255) # Light red*
*        self.table.item(6, 3).setBackground(color)*
*
*
*    def keyPressEvent(self, event):*
*         if type(event) == QtGui.QKeyEvent:*
*             #here accept the event and do something*
*             print event.key()*
*             event.accept()*
*         else:*
*             event.ignore()*
*
*
*#        print self.table.currentColumn(), self.table.currentRow()*
*
*
*
*
*if __name__ == "__main__":*
*    app = QtGui.QApplication(sys.argv)*
*    fen = MainWindow()*
*    fen.show()*
*    sys.exit(app.exec_())*


[Attachment #5 (text/html)]

Hello,<div>I would like to act before the change of the content of one cell in a \
table. To do that I have made all the cells not editable, and I have tried to use the \
<b><font face="courier new, monospace">keyevent</font></b> method. This does not work \
: only the enter key is recognized. </div> <div><br></div><div>Indeed, I would to act \
if A is pressed, without changing the content of the cell, and also to change the \
content only if one digit is pressed. What is the good way to do that ? I&#39;ve put \
one minimal not working code just after. </div> <div><br></div><div>One precision : \
some celle cannot be changed (this is for a sudoku).</div><div><br></div><div>Best \
regards.</div><div>Christophe \
BAL<br><div><br></div><div><br></div><div><br></div><div><font face="courier new, \
monospace"><b>==== THE CODE ====</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><div><font face="courier new, \
monospace"><b>#! /usr/bin/env python2.7</b></font></div><div><font face="courier new, \
monospace"><b># -*- coding: utf-8 -*-</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># \
Source : <a href="http://www.developpez.net/forums/d1281788/autres-langages/python-zop \
e/gui/pyside-pyqt/coquille-vide-sudoku/#post7181230">http://www.developpez.net/forums/ \
d1281788/autres-langages/python-zope/gui/pyside-pyqt/coquille-vide-sudoku/#post7181230</a></b></font></div>
 <div><font face="courier new, monospace"><b><br></b></font></div><div><font \
face="courier new, monospace"><b>from __future__ import \
division</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div> <div><font face="courier new, \
monospace"><b>import sys</b></font></div><div><font face="courier new, \
monospace"><b>from copy import deepcopy</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div> <div><font face="courier new, monospace"><b>from \
PySide import QtCore, QtGui</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>def \
cellColor(painter, option, color):</b></font></div> <div><font face="courier new, \
monospace"><b>    &quot;&quot;&quot;</b></font></div><div><font face="courier new, \
monospace"><b>    ???</b></font></div><div><font face="courier new, monospace"><b>    \
&quot;&quot;&quot;</b></font></div> <div><font face="courier new, monospace"><b>    r \
= option.rect</b></font></div><div><font face="courier new, monospace"><b>    x, y, \
w, h = r.x() + 1, r.y() + 1, r.width()-2, r.height()-2</b></font></div><div><font \
face="courier new, monospace"><b><br> </b></font></div><div><font face="courier new, \
monospace"><b>    if isinstance(color, (str, unicode)):</b></font></div><div><font \
face="courier new, monospace"><b>        color = \
QtGui.QColor(color)</b></font></div><div><font face="courier new, monospace"><b><br> \
</b></font></div><div><font face="courier new, monospace"><b>    elif \
isinstance(color, (list, tuple)):</b></font></div><div><font face="courier new, \
monospace"><b>        if len(color) == 3:</b></font></div><div><font face="courier \
new, monospace"><b>            r, g, b = color</b></font></div> <div><font \
face="courier new, monospace"><b>            alpha   = 255</b></font></div><div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>        else:</b></font></div> <div><font face="courier new, \
monospace"><b>            r, g, b, alpha = color</b></font></div><div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>        color = QtGui.QColor(r, g, b, alpha)</b></font></div> \
<div><font face="courier new, monospace"><b><br></b></font></div><div><font \
face="courier new, monospace"><b>    painter.fillRect(x, y, w, h, \
color)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div> <div><font face="courier new, monospace"><b>def \
cellBorder(painter, option, where):</b></font></div><div><font face="courier new, \
monospace"><b>    &quot;&quot;&quot;</b></font></div><div><font face="courier new, \
monospace"><b>    ???</b></font></div> <div><font face="courier new, monospace"><b>   \
&quot;&quot;&quot;</b></font></div><div><font face="courier new, monospace"><b>    r \
= option.rect</b></font></div><div><font face="courier new, monospace"><b>    x, y, \
w, h = r.x(), r.y(), r.width(), r.height()</b></font></div> <div><font face="courier \
new, monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>  \
if where == &#39;up&#39;:</b></font></div><div><font face="courier new, \
monospace"><b>        x1, y1, x2, y2 = x, y, x + w, y</b></font></div> <div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>    elif where == &#39;bottom&#39;:</b></font></div><div><font \
face="courier new, monospace"><b>        x1, y1, x2, y2 = x + w, y + h, x, y + \
h</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>    \
elif where == &#39;right&#39;:</b></font></div><div><font face="courier new, \
monospace"><b>        x1, y1, x2, y2 = x + w, y, x + w, y + h</b></font></div> \
<div><font face="courier new, monospace"><b><br></b></font></div><div><font \
face="courier new, monospace"><b>    elif where == \
&#39;left&#39;:</b></font></div><div><font face="courier new, monospace"><b>        \
x1, y1, x2, y2 = x, y + h, x, y</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>    \
else:</b></font></div><div><font face="courier new, monospace"><b>        return \
None</b></font></div><div><font face="courier new, monospace"><b><br> \
</b></font></div><div><font face="courier new, monospace"><b>    pen = \
QtGui.QPen()</b></font></div><div><font face="courier new, monospace"><b>    \
pen.setWidth(4)</b></font></div><div><font face="courier new, monospace"><b>    \
painter.setPen(pen)</b></font></div> <div><font face="courier new, monospace"><b>    \
painter.drawLine(x1, y1, x2, y2)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div> <div><font face="courier new, monospace"><b>class \
SudokuDelegate(QtGui.QItemDelegate):</b></font></div><div><font face="courier new, \
monospace"><b>    def __init__(self, parent=None):</b></font></div><div><font \
face="courier new, monospace"><b>        super(SudokuDelegate, \
self).__init__(parent)</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>    \
def initGrid(self, grid):</b></font></div><div><font face="courier new, \
monospace"><b>        self.grid_0 = grid</b></font></div> <div><font face="courier \
new, monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>  \
def paint(self, painter, option, index):</b></font></div><div><font face="courier \
new, monospace"><b>        &quot;&quot;&quot;</b></font></div> <div><font \
face="courier new, monospace"><b>        ???</b></font></div><div><font face="courier \
new, monospace"><b>        &quot;&quot;&quot;</b></font></div><div><font \
face="courier new, monospace"><b>        row, col = index.row(), \
index.column()</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
if row == 0 or row == 3 or row == 6:</b></font></div><div><font face="courier new, \
monospace"><b>            if col in[0,3,6]:</b></font></div> <div><font face="courier \
new, monospace"><b>                cellBorder(painter, option, \
&#39;left&#39;)</b></font></div><div><font face="courier new, monospace"><b>          \
cellBorder(painter, option, &#39;up&#39;)</b></font></div> <div><font face="courier \
new, monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>  \
elif col == 8:</b></font></div><div><font face="courier new, monospace"><b>           \
cellBorder(painter, option, &#39;right&#39;)</b></font></div> <div><font \
face="courier new, monospace"><b>                cellBorder(painter, option, \
&#39;up&#39;)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
else:</b></font></div> <div><font face="courier new, monospace"><b>                \
cellBorder(painter, option, &#39;up&#39;)</b></font></div><div><font face="courier \
new, monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>  \
elif row in [1,2,4,5,7]:</b></font></div> <div><font face="courier new, \
monospace"><b>            if col in [0,3,6]:</b></font></div><div><font face="courier \
new, monospace"><b>                cellBorder(painter, option, \
&#39;left&#39;)</b></font></div><div><font face="courier new, monospace"><b><br> \
</b></font></div><div><font face="courier new, monospace"><b>            elif col == \
8:</b></font></div><div><font face="courier new, monospace"><b>                \
cellBorder(painter, option, &#39;right&#39;)</b></font></div> <div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>        elif row == 8:</b></font></div><div><font face="courier new, \
monospace"><b>            if col in[0,3,6]:</b></font></div> <div><font face="courier \
new, monospace"><b>                cellBorder(painter, option, \
&#39;left&#39;)</b></font></div><div><font face="courier new, monospace"><b>          \
cellBorder(painter, option, &#39;bottom&#39;)</b></font></div> <div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>            elif col == 8:</b></font></div><div><font face="courier \
new, monospace"><b>                cellBorder(painter, option, \
&#39;right&#39;)</b></font></div> <div><font face="courier new, monospace"><b>        \
cellBorder(painter, option, &#39;bottom&#39;)</b></font></div><div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>            else:</b></font></div> <div><font face="courier new, \
monospace"><b>                cellBorder(painter, option, \
&#39;bottom&#39;)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># \
Background color for initial known cells</b></font></div> <div><font face="courier \
new, monospace"><b>        if self.grid_0[row][col]!=0:</b></font></div><div><font \
face="courier new, monospace"><b>            cellColor(painter, option, \
[200,200,200])</b></font></div><div><font face="courier new, monospace"><b><br> \
</b></font></div><div><font face="courier new, monospace"><b>        \
QtGui.QItemDelegate.paint(self, painter, option, index)</b></font></div><div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>class MainWindow(QtGui.QWidget):</b></font></div> <div><font \
face="courier new, monospace"><b>    def __init__(</b></font></div><div><font \
face="courier new, monospace"><b>        self,</b></font></div><div><font \
face="courier new, monospace"><b>        parent = None</b></font></div> <div><font \
face="courier new, monospace"><b>    ):</b></font></div><div><font face="courier new, \
monospace"><b>        super(MainWindow, \
self).__init__(parent)</b></font></div><div><font face="courier new, \
monospace"><b><br> </b></font></div><div><font face="courier new, monospace"><b># \
General grid</b></font></div><div><font face="courier new, monospace"><b>        \
self.table = QtGui.QTableWidget(self)</b></font></div><div><font face="courier new, \
monospace"><b>        self.nbrow, self.nbcol = 9, 9</b></font></div> <div><font \
face="courier new, monospace"><b>        \
self.table.setRowCount(self.nbrow)</b></font></div><div><font face="courier new, \
monospace"><b>        \
self.table.setColumnCount(self.nbcol)</b></font></div><div><font face="courier new, \
monospace"><b><br> </b></font></div><div><font face="courier new, monospace"><b># \
Each cell has dimension 50 pixels x 50 pixels</b></font></div><div><font \
face="courier new, monospace"><b>        for row in range(0, \
self.nbrow):</b></font></div> <div><font face="courier new, monospace"><b>            \
self.table.setRowHeight(row, 50)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
for col in range(0, self.nbcol):</b></font></div> <div><font face="courier new, \
monospace"><b>                self.table.setColumnWidth(col, \
50)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># Each \
cell contains one single QTableWidgetItem</b></font></div> <div><font face="courier \
new, monospace"><b>        for row in range(0, \
self.nbrow):</b></font></div><div><font face="courier new, monospace"><b>            \
for col in range(0, self.nbcol):</b></font></div><div><font face="courier new, \
monospace"><b>                item = QtGui.QTableWidgetItem()</b></font></div> \
<div><font face="courier new, monospace"><b>                \
item.setTextAlignment(</b></font></div><div><font face="courier new, monospace"><b>   \
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter</b></font></div> <div><font \
face="courier new, monospace"><b>                )</b></font></div><div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b>                self.table.setItem(row, col, item)</b></font></div> \
<div><font face="courier new, monospace"><b><br></b></font></div><div><font \
face="courier new, monospace"><b># Header formatting</b></font></div><div><font \
face="courier new, monospace"><b>        font = QtGui.QFont()</b></font></div> \
<div><font face="courier new, monospace"><b>        font.setFamily(u&quot;DejaVu \
Sans&quot;)</b></font></div><div><font face="courier new, monospace"><b>        \
font.setPointSize(12)</b></font></div><div><font face="courier new, monospace"><b>    \
self.table.horizontalHeader().setFont(font)</b></font></div> <div><font face="courier \
new, monospace"><b>        \
self.table.verticalHeader().setFont(font)</b></font></div><div><font face="courier \
new, monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># \
Font used</b></font></div> <div><font face="courier new, monospace"><b>        font = \
QtGui.QFont()</b></font></div><div><font face="courier new, monospace"><b>        \
font.setFamily(u&quot;DejaVu Sans&quot;)</b></font></div><div><font face="courier \
new, monospace"><b>        font.setPointSize(20)</b></font></div> <div><font \
face="courier new, monospace"><b>        \
self.table.setFont(font)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># \
Global Size</b></font></div> <div><font face="courier new, monospace"><b>        \
self.resize(60*9, 60*9 + 20)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># \
Layout of the table</b></font></div> <div><font face="courier new, monospace"><b>     \
layout = QtGui.QGridLayout()</b></font></div><div><font face="courier new, \
monospace"><b>        layout.addWidget(self.table, 0, 0)</b></font></div><div><font \
face="courier new, monospace"><b>        self.setLayout(layout)</b></font></div> \
<div><font face="courier new, monospace"><b><br></b></font></div><div><font \
face="courier new, monospace"><b># Initial grid (to test)</b></font></div><div><font \
<div><font face="courier new, monospace"><b>#</b></font></div><div><font \
face="courier new, monospace"><b>            [0,4,7, 0,0,5, \
0,8,0],</b></font></div><div><font face="courier new, monospace"><b>            \
[0,0,0, 0,0,0, 0,0,0],</b></font></div> <div><font face="courier new, monospace"><b>  \
[0,2,0, 9,0,0, 7,4,0],</b></font></div><div><font face="courier new, \
monospace"><b>#</b></font></div><div><font face="courier new, monospace"><b>          \
[0,9,5, 0,0,2, 0,3,0],</b></font></div> <div><font face="courier new, monospace"><b>  \
[6,0,0, 0,0,8, 0,0,0],</b></font></div><div><font face="courier new, monospace"><b>   \
[7,0,4, 0,6,0, 0,0,0]</b></font></div><div><font face="courier new, monospace"><b>    \
]</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b># Use \
of the delegate so to use thicker lines.</b></font></div><div><font face="courier \
new, monospace"><b>        self.delegate = \
SudokuDelegate(self.table)</b></font></div> <div><font face="courier new, \
monospace"><b>        \
self.table.setItemDelegate(self.delegate)</b></font></div><div><font face="courier \
new, monospace"><b>        \
self.delegate.initGrid(self.grid_0)</b></font></div><div><font face="courier new, \
monospace"><b><br> </b></font></div><div><font face="courier new, monospace"><b># \
Initialization of the actual grid</b></font></div><div><font face="courier new, \
monospace"><b>        self.grid = deepcopy(self.grid_0)</b></font></div><div><font \
face="courier new, monospace"><b><br> </b></font></div><div><font face="courier new, \
monospace"><b># Display the grid.</b></font></div><div><font face="courier new, \
monospace"><b>        self.update(self.grid)</b></font></div><div><font face="courier \
new, monospace"><b><br> </b></font></div><div><font face="courier new, \
monospace"><b># Set the focus in the first cell</b></font></div><div><font \
face="courier new, monospace"><b>        \
self.table.setFocus()</b></font></div><div><font face="courier new, monospace"><b>    \
self.table.setCurrentCell(0, 0)</b></font></div> <div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>    \
def update(self, g):</b></font></div><div><font face="courier new, monospace"><b>     \
for row in range(0, len(g[0])):</b></font></div> <div><font face="courier new, \
monospace"><b>            for col in range(0, len(g)):</b></font></div><div><font \
face="courier new, monospace"><b>                if g[row][col] == \
0:</b></font></div><div><font face="courier new, monospace"><b>                    \
font = QtGui.QFont()</b></font></div> <div><font face="courier new, monospace"><b>    \
font.setFamily(u&quot;DejaVu Sans&quot;)</b></font></div><div><font face="courier \
new, monospace"><b>                    font.setPointSize(12)</b></font></div> \
<div><font face="courier new, monospace"><b>                    self.table.item(row, \
col).setFont(font)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
color = QtGui.QColor(0, 0,  255, 255) # bleu</b></font></div> <div><font \
face="courier new, monospace"><b>                    self.table.item(row, \
col).setForeground(color)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
self.table.item(row, col).setText(</b></font></div> <div><font face="courier new, \
monospace"><b>                        u&quot;1 2 3\n4 5 6\n7 8 \
9&quot;</b></font></div><div><font face="courier new, monospace"><b>                  \
)</b></font></div><div><font face="courier new, monospace"><b>                    \
self.table.item(</b></font></div> <div><font face="courier new, monospace"><b>        \
row, col</b></font></div><div><font face="courier new, monospace"><b>                 \
).setFlags(</b></font></div><div><font face="courier new, monospace"><b>              \
QtCore.Qt.ItemIsEnabled</b></font></div> <div><font face="courier new, monospace"><b> \
| QtCore.Qt.ItemIsSelectable</b></font></div><div><font face="courier new, \
monospace"><b>#                        | QtCore.Qt.ItemIsEditable</b></font></div> \
<div><font face="courier new, monospace"><b>                    \
)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
else:</b></font></div> <div><font face="courier new, monospace"><b>                   \
self.table.item(row, col).setText(unicode(g[row][col]))</b></font></div><div><font \
face="courier new, monospace"><b>                    \
self.table.item(</b></font></div> <div><font face="courier new, monospace"><b>        \
row, col</b></font></div><div><font face="courier new, monospace"><b>                 \
).setFlags(</b></font></div><div><font face="courier new, monospace"><b>              \
QtCore.Qt.ItemIsEnabled</b></font></div> <div><font face="courier new, monospace"><b> \
| QtCore.Qt.ItemIsSelectable</b></font></div><div><font face="courier new, \
monospace"><b>                    )</b></font></div><div><font face="courier new, \
monospace"><b><br> </b></font></div><div><font face="courier new, monospace"><b># \
Just for testing !</b></font></div><div><font face="courier new, monospace"><b>       \
color = QtGui.QColor(160, 255, 160, 255) # Light green</b></font></div> <div><font \
face="courier new, monospace"><b>        self.table.item(2, \
4).setBackground(color)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>       \
color = QtGui.QColor(255, 160, 160, 255) # Light red</b></font></div> <div><font \
face="courier new, monospace"><b>        self.table.item(6, \
3).setBackground(color)</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>    \
def keyPressEvent(self, event):</b></font></div> <div><font face="courier new, \
monospace"><b>         if type(event) == QtGui.QKeyEvent:</b></font></div><div><font \
face="courier new, monospace"><b>             #here accept the event and do \
something</b></font></div><div> <font face="courier new, monospace"><b>             \
print event.key()</b></font></div><div><font face="courier new, monospace"><b>        \
event.accept()</b></font></div><div><font face="courier new, monospace"><b>         \
else:</b></font></div> <div><font face="courier new, monospace"><b>             \
event.ignore()</b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>#      \
print self.table.currentColumn(), self.table.currentRow()</b></font></div> <div><font \
face="courier new, monospace"><b><br></b></font></div><div><font face="courier new, \
monospace"><b><br></b></font></div><div><font face="courier new, monospace"><b>if \
__name__ == &quot;__main__&quot;:</b></font></div> <div><font face="courier new, \
monospace"><b>    app = QtGui.QApplication(sys.argv)</b></font></div><div><font \
face="courier new, monospace"><b>    fen = MainWindow()</b></font></div><div><font \
face="courier new, monospace"><b>    fen.show()</b></font></div> <div><font \
face="courier new, monospace"><b>    \
sys.exit(app.exec_())</b></font></div></div><div><br></div></div>



_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic