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
| #!/usr/bin/python3
# -*- coding: utf-8 -*-
# Python 3
import sys
from PyQt4 import QtCore, QtGui
#############################################################################
class Fenetre(QtGui.QWidget):
# =======================================================================
def __init__(self, parent=None):
super(Fenetre, self).__init__(parent)
self.resize(800, 600)
self.tableWidget = QtGui.QTableWidget(self)
self.nbrow, self.nbcol = 7, 7
self.tableWidget.setRowCount(self.nbrow)
self.tableWidget.setColumnCount(self.nbcol)
self.tableWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
posit = QtGui.QGridLayout()
posit.addWidget(self.tableWidget, 0, 0)
self.setLayout(posit)
self.tableWidget.setFocus()
self.tableWidget.setCurrentCell(0, 0)
# =======================================================================
def copier(self):
"""copier la zone sélectionnée dans le clipboard
"""
# emplacement sélectionné pour copier dans le clipboard
selected = self.tableWidget.selectedRanges()
# construction du texte à copier, ligne par ligne et colonne par colonne
texte = ""
for i in range(selected[0].topRow(), selected[0].bottomRow() + 1):
for j in range(selected[0].leftColumn(), selected[0].rightColumn() + 1):
try:
texte += self.tableWidget.item(i, j).text() + "\t"
except AttributeError:
# quand une case n'a jamais été initialisée
texte += "\t"
texte = texte[:-1] + "\n" # le [:-1] élimine le '\t' en trop
# enregistrement dans le clipboard
QtGui.QApplication.clipboard().setText(texte)
# =======================================================================
def coller(self):
"""coller le contenu du clipboard dans la zone sélectionnée
"""
# zone sélectionnée pour coller le contenu du clipboard
selected = self.tableWidget.selectedRanges()
# coordonnées de la case en haut à gauche de la zone sélectionnée
row0 = selected[0].topRow()
col0 = selected[0].leftColumn()
# récup du contenu du clipboard
texte = QtGui.QApplication.clipboard().text()
# placer ce contenu dans le QTableWidget
for i, texteligne in enumerate(texte.split('\n')):
for j, textecase in enumerate(texteligne.split('\t')):
self.tableWidget.setItem(row0 + i, col0 + j, QtGui.QTableWidgetItem(textecase))
# =======================================================================
def keyPressEvent(self, event):
if self.tableWidget.hasFocus():
#----------------------------------------------------------------
# Ctle-C: copier
if event.key() == QtCore.Qt.Key_C and (event.modifiers() & QtCore.Qt.ControlModifier):
self.copier()
event.accept()
#----------------------------------------------------------------
# Ctle-V: coller
if event.key() == QtCore.Qt.Key_V and (event.modifiers() & QtCore.Qt.ControlModifier):
self.coller()
event.accept()
#----------------------------------------------------------------
else:
event.ignore()
else:
event.ignore()
#############################################################################
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
fen = Fenetre()
fen.show()
sys.exit(app.exec_()) |
Partager