[resultsscreen] copy and paste to excel works

This commit is contained in:
Jan Grewe 2021-03-06 14:19:37 +01:00
parent 519463e690
commit 9524d8f8f8

View File

@ -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()