77 lines
3.7 KiB
Python
77 lines
3.7 KiB
Python
import sys
|
|
import weakref
|
|
|
|
from PyQt5.QtCore import QEvent, Qt
|
|
from PyQt5.QtWidgets import QApplication, QTableWidget
|
|
|
|
|
|
class CopyPastableCrudQTableWidget(QTableWidget):
|
|
crud = None
|
|
|
|
def eventFilter(self, target, event):
|
|
if event.type() == QEvent.KeyPress:
|
|
pass
|
|
# if event.key() == Qt.Key_C and (event.modifiers() & Qt.ControlModifier):
|
|
# if event.key() == Qt.Key_C and (event.modifiers() & Qt.ControlModifier):
|
|
# copied_cells = sorted(self.selectedIndexes())
|
|
# min_row, max_row, min_col, max_col = sys.maxsize, 0, sys.maxsize, 0
|
|
# for cell in copied_cells:
|
|
# row = cell.row()
|
|
# min_row, max_row = min(row, min_row), max(row, max_row)
|
|
# col = cell.column()
|
|
# min_col, max_col = min(col, min_col), max(col, max_col)
|
|
# if min_row == 0: # if filters row
|
|
# return False
|
|
# copy_sparse = {}
|
|
# for cell in copied_cells:
|
|
# row = cell.row()
|
|
# col = cell.column()
|
|
# if row not in copy_sparse:
|
|
# copy_sparse[row] = {}
|
|
# cell = self.cellWidget(row, col)
|
|
# if cell is not None:
|
|
# copy_sparse[row][col] = cell.parse(row_number=row, crud=weakref.ref(self.crud))
|
|
# copy_dense = [["" for col in range(max_col - min_col + 1)] for row in range(max_row - min_row + 1)]
|
|
# for row, row_cells in copy_sparse.items():
|
|
# for col, cell_text in row_cells.items():
|
|
# if cell_text is not None:
|
|
# copy_dense[row - min_row][col - min_col] = str(cell_text)
|
|
# copy_text = "\n".join(["\t".join(row) for row in copy_dense])
|
|
# QApplication.clipboard().setText(copy_text)
|
|
# super().keyPressEvent(event)
|
|
# QApplication.sendEvent(self, event)
|
|
# return True
|
|
# elif event.key() == Qt.Key_V and (event.modifiers() & Qt.ControlModifier):
|
|
# min_row = self.currentRow()
|
|
# min_col = self.currentColumn()
|
|
# if min_row == 0: # if filters row
|
|
# return False
|
|
# copy_text = QApplication.clipboard().text()
|
|
# copy_dense = [row.split("\t") for row in copy_text.split("\n")]
|
|
# if len(copy_dense) > 1 and len(copy_dense[-1]) == 1 and not len(copy_dense[-1][-1]):
|
|
# copy_dense.pop(-1)
|
|
# for row, row_cells in enumerate(copy_dense):
|
|
# for col, cell_text in enumerate(row_cells):
|
|
# r = min_row + row
|
|
# c = min_col + col
|
|
# cell = self.cellWidget(r, c)
|
|
# if cell is not None:
|
|
# cell.render(cell_text, field_name=self.crud.select[c] if self.crud is not None else None, row_number=r, crud=weakref.ref(self.crud))
|
|
# super().keyPressEvent(event)
|
|
# QApplication.sendEvent(self, event)
|
|
# return True
|
|
return super().eventFilter(target, event)
|
|
|
|
def setCellWidget(self, row, column, widget):
|
|
widget.installEventFilter(self)
|
|
super().setCellWidget(row, column, widget)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app = QApplication(sys.argv)
|
|
table = CopyPastableCrudQTableWidget()
|
|
table.setRowCount(10)
|
|
table.setColumnCount(10)
|
|
table.show()
|
|
sys.exit(app.exec())
|