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
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python 2.7
import sys
from PyQt4 import QtCore, QtGui
#############################################################################
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:
# soit la case n'a jamais �t� initialis�e, soit elle a un widget
if issubclass(type(table.cellWidget(row,col)), QtGui.QComboBox):
# c'est un combobox: renvoyer la valeur affich�e
item = table.cellWidget(row,col)
return unicode(item.currentText())
# la case ne contient rien: renvoyer une chaine vide
return u""
else:
return unicode(item.text())
#############################################################################
class Fenetre(QtGui.QWidget):
# =======================================================================
def __init__(self, parent=None):
super(Fenetre, self).__init__(parent)
# cr�er le lineEdit
self.lineEdit = QtGui.QLineEdit(self)
# cr�er le tableau
self.tableWidget = QtGui.QTableWidget(self)
self.tableWidget.setGeometry(QtCore.QRect(0, 30, 361, 301))
self.nbrow, self.nbcol = 5, 3
self.tableWidget.setRowCount(self.nbrow)
self.tableWidget.setColumnCount(self.nbcol)
# on met un combobox en [row=1, col=1]
self.listecombo = ['toto', 'titi', 'tata', 'tutu']
self.combo = QtGui.QComboBox()
self.combo.addItems(self.listecombo)
self.rowcombo, self.colcombo = 1, 1
self.tableWidget.setCellWidget(self.rowcombo, self.colcombo, self.combo)
item = QtGui.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
self.tableWidget.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("fenetre", "nom de la colonne numero un ", None, QtGui.QApplication.UnicodeUTF8))
# lancera la m�thode saisieval � chaque changement de case
QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('currentCellChanged(int,int,int,int)'), self.saisieval)
# lancera la m�thode saisievalder � chaque changement de contenu de case
QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('itemChanged(QTableWidgetItem *)'), self.saisievalder)
#
QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL('itemClicked(QTableWidgetItem *)'),self._itemClicked)
# mettre le focus sur la case [0,0] du tableau
self.tableWidget.setFocus()
self.tableWidget.setCurrentCell(0, 0)
# =======================================================================
def saisieval(self, row, col, row0, col0):
"""M�thode lanc�e � chaque changement de case du tableau
row, col = coordonn�es de la nouvelle case
row0, col0 = coordonn�es de l'ancienne case
"""
val = prendcase(self.tableWidget, row0, col0)
print "valeur saisie",val
print "row=%d, column=%d " % (
row0,col0)
self.lineEdit.setText(val)
# =======================================================================
def saisievalder(self, item):
"""m�thode lanc�e � chaque changement de contenu en fin d'�dition"""
row = self.tableWidget.currentRow()
col = self.tableWidget.currentColumn()
if row==self.tableWidget.rowCount()-1 and col==self.tableWidget.columnCount()-1:
val = prendcase(self.tableWidget, row, col)
self.lineEdit.setText(val)
def _itemClicked(self, item):
print "text=%s, row=%d, column=%d" % (
item.text(), item.row()+1, item.column()+1)
#############################################################################
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
fen = Fenetre()
fen.show()
sys.exit(app.exec_()) |
Partager