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
| #!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
#############################################################################
def metcase(table, row, col, val):
"""met la valeur val dans la case [row, col] de la table QTableWidget"""
item = table.item(row, col)
if item == None:
# la case n'a jamais été initialisée
item = QtGui.QTableWidgetItem(val)
table.setItem(row, col, item)
else:
item.setText(val)
#############################################################################
def prendcase(table, row, col):
"""Retourne la valeur de la case [row, col] de la table QTableWidget"""
item = table.item(row, col)
if item == None:
return u""
else:
return unicode(item.text())
#############################################################################
class Fenetre(QtGui.QWidget):
# =======================================================================
def __init__(self, parent=None):
super(Fenetre, self).__init__(parent)
self.lineEdit = QtGui.QLineEdit(self)
self.tableWidget = QtGui.QTableWidget(self)
self.tableWidget.setGeometry(QtCore.QRect(0, 30, 361, 301))
nblig, nbcol = 5, 3
self.tableWidget.setColumnCount(nbcol)
self.tableWidget.setRowCount(nblig)
# initialise toutes les cases
for i in xrange(0,nblig):
for j in xrange(0,nbcol):
metcase(self.tableWidget, i, j, u"")
# installation d'un filtrage d'évènements pour tableWidget
self.tableWidget.installEventFilter(self)
# lancera la méthode saisieval à chaque changement de case
QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('currentCellChanged(int,int,int,int)'), self.saisieval)
# =======================================================================
def eventFilter(self, obj, event):
"""Filtrages des évènements"""
if obj == self.tableWidget:
if event.type() == QtCore.QEvent.FocusOut:
lig = self.tableWidget.currentRow()
col = self.tableWidget.currentColumn()
val = prendcase(self.tableWidget, lig, col)
self.lineEdit.setText(val)
return True
else:
return False
else:
# transmission au parent de la fenêtre
return QtGui.QWidget.eventFilter(obj, event)
# =======================================================================
def saisieval(self, lig, col, lig0, col0):
"""Méthode lancée à chaque changement de case du tableau"""
val = prendcase(self.tableWidget, lig0, col0)
self.lineEdit.setText(val)
#############################################################################
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
fen = Fenetre()
fen.show()
sys.exit(app.exec_()) |