1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python 2.7
import sys
from copy import deepcopy
from PyQt4 import QtCore, QtGui
#############################################################################
class Fenetre(QtGui.QWidget):
# =======================================================================
def __init__(self, parent=None):
super(Fenetre, self).__init__(parent)
# crée la grille 9x9
self.table = QtGui.QTableWidget(self)
self.nbrow, self.nbcol = 9, 9
self.table.setRowCount(self.nbrow)
self.table.setColumnCount(self.nbcol)
# cache les entêtes horizontale et verticale
self.table.horizontalHeader().hide()
self.table.verticalHeader().hide()
# définit les cases carrées 50 pixels x 50 pixels
for row in xrange(0, self.nbrow):
self.table.setRowHeight(row, 50)
for col in xrange(0, self.nbcol):
self.table.setColumnWidth(col, 50)
# remplit la grille avec des QTableWidgetItem
for row in xrange(0, self.nbrow):
for col in xrange(0, self.nbcol):
item = QtGui.QTableWidgetItem()
item.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
self.table.setItem(row, col, item)
# définit la police de caractère par défaut de la table
font = QtGui.QFont()
font.setFamily(u"DejaVu Sans")
font.setPointSize(16)
self.table.setFont(font)
# taille de la fenêtre
self.resize(53*9, 53*9)
# positionne la table dans la fenêtre
posit = QtGui.QGridLayout()
posit.addWidget(self.table, 0, 0)
self.setLayout(posit)
# grille de base
self.g0 = [[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]]
# intégre le delegate pour lignes en gras et les cases en couleur
#self.delegate = MonDelegate(self.table)
#self.table.setItemDelegate(self.delegate)
# redessine les lignes en gras et les cases de couleur
#self.delegate.grilleinit(self.g0)
# initialise la grille courante
self.g = deepcopy(self.g0)
# affiche la grille courante
self.affiche(self.g)
# place le focus
self.table.setFocus()
self.table.setCurrentCell(0, 0)
# =======================================================================
def affiche(self, g):
for row in xrange(0, len(g[0])):
for col in xrange(0, len(g)):
if g[row][col]==0:
self.table.item(row, col).setText(u"")
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)
couleur = QtGui.QColor(160, 255, 160, 255) # vert clair
self.table.item(2, 4).setBackgroundColor(couleur)
couleur = QtGui.QColor(255, 160, 160, 255) # rouge clair
self.table.item(6, 3).setBackgroundColor(couleur)
#############################################################################
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
fen = Fenetre()
fen.show()
sys.exit(app.exec_()) |
Partager