From 9524d8f8f8389ce83308bc57a7995c00e9b4db9b Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sat, 6 Mar 2021 14:19:37 +0100 Subject: [PATCH] [resultsscreen] copy and paste to excel works --- blipblop/ui/resultsscreen.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/blipblop/ui/resultsscreen.py b/blipblop/ui/resultsscreen.py index 047568c..10c92df 100644 --- a/blipblop/ui/resultsscreen.py +++ b/blipblop/ui/resultsscreen.py @@ -1,3 +1,6 @@ +import io +import csv +from PyQt5 import QtWidgets from PyQt5.QtGui import QFont, QKeySequence from PyQt5.QtWidgets import QAction, QComboBox, QFrame, QGroupBox, QHBoxLayout, QLabel, QSplitter, QStackedLayout, QTableWidget, QTableWidgetItem, QTextEdit, QVBoxLayout, QWidget from PyQt5.QtCore import QItemSelectionModel, Qt, reset, pyqtSignal @@ -21,14 +24,20 @@ class ResultsScreen(QWidget): font.setPointSize(25) label.setStyleSheet("color: #2D4B9A") label.setFont(font) - self._stack.addWidget(label) # 0 + self._stack.addWidget(label) # 0 self._stack.addWidget(self.table) # 1 self.setLayout(self._stack) self._back_action = QAction("back") self._back_action.setShortcut(QKeySequence("escape")) self._back_action.triggered.connect(self.on_back) + + self._copy_action = QAction("copy") + self._copy_action.setShortcut(QKeySequence("ctrl+c")) + self._copy_action.triggered.connect(self.copy_selection) + self.addAction(self._back_action) + self.addAction(self._copy_action) def set_results(self, measurement_results): if len(measurement_results) == 0: @@ -54,6 +63,26 @@ class ResultsScreen(QWidget): self._stack.setCurrentIndex(1) + def copy_selection(self): + """ + solution stolen from StackOverflow https://stackoverflow.com/a/55204654 + """ + selection = self.table.selectedIndexes() + if selection: + rows = sorted(index.row() for index in selection) + columns = sorted(index.column() for index in selection) + rowcount = rows[-1] - rows[0] + 1 + colcount = columns[-1] - columns[0] + 1 + table = [[''] * colcount for _ in range(rowcount)] + for index in selection: + row = index.row() - rows[0] + column = index.column() - columns[0] + table[row][column] = index.data() + stream = io.StringIO() + csv.writer(stream, delimiter='\t').writerows(table) + QtWidgets.qApp.clipboard().setText(stream.getvalue()) + return + def on_back(self): self.back_signal.emit()