Source code for puzzlestream.ui.dataviewexport

# -*- coding: utf-8 -*-
"""Data view export dialog module.

contains PSTableExportDialog
"""

import os
from collections import OrderedDict
from io import BytesIO

import numpy as np
from PyQt5 import QtCore, QtWidgets
from tabulate import tabulate

translate = QtCore.QCoreApplication.translate


[docs]class PSTableExportDialog(QtWidgets.QDialog): def __init__(self, data: np.ndarray, parent: QtCore.QObject = None): super().__init__(parent) self.setStyleSheet( "QDialog { min-height: 12.5em; max-height: 12.5em; " + "min-width: 25em; max-width: 25em; }" ) self.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) self.show() self.__data = data self.vbox = QtWidgets.QVBoxLayout() self.setLayout(self.vbox) self.groupBox = QtWidgets.QGroupBox() self.groupBoxLayout = QtWidgets.QVBoxLayout() self.groupBox.setLayout(self.groupBoxLayout) self.vbox.addWidget(self.groupBox) self.radioButtons = OrderedDict([ ("txt", QtWidgets.QRadioButton()), ("csv", QtWidgets.QRadioButton()), ("tex", QtWidgets.QRadioButton()) ]) self.radioButtons["txt"].setChecked(True) for btn in self.radioButtons.values(): self.groupBoxLayout.addWidget(btn) self.saveBtn = QtWidgets.QPushButton() self.clipboardBtn = QtWidgets.QPushButton() self.cancelBtn = QtWidgets.QPushButton() self.saveBtn.clicked.connect(self.__save) self.clipboardBtn.clicked.connect(self.__toClipboard) self.cancelBtn.clicked.connect(self.close) self.btnHBox = QtWidgets.QHBoxLayout() self.btnHBox.setAlignment(QtCore.Qt.AlignRight) self.btnHBox.addWidget(self.saveBtn) self.btnHBox.addWidget(self.clipboardBtn) self.btnHBox.addWidget(self.cancelBtn) self.vbox.addLayout(self.btnHBox) self.retranslateUi() self.show()
[docs] def retranslateUi(self): self.groupBox.setTitle( translate("DataViewExport", "Please choose an export format:")) radioButtonTexts = OrderedDict([ ("txt", translate("DataViewExport", "Plain text")), ("csv", translate("DataViewExport", "Comma separated (csv)")), ("tex", translate("DataViewExport", "Latex")) ]) for key in self.radioButtons: self.radioButtons[key].setText(radioButtonTexts[key]) self.saveBtn.setText(translate("DataViewExport", "Save")) self.clipboardBtn.setText( translate("DataViewExport", "Copy to clipboard")) self.cancelBtn.setText(translate("DataViewExport", "Cancel"))
def __getSelectedType(self) -> str: for key in self.radioButtons: if self.radioButtons[key].isChecked(): return key def __getExport(self, selected: str) -> str: if selected == "txt": return tabulate(self.__data) elif selected == "tex": return tabulate(self.__data, tablefmt="latex") def __save(self): selected = self.__getSelectedType() path, _ = QtWidgets.QFileDialog.getSaveFileName(self, filter="*." + selected) if path != "": export = self.__getExport(selected) if export is not None: with open(path, "w") as f: f.write(export) elif selected == "csv": np.savetxt(path, self.__data, delimiter=",") self.close() def __toClipboard(self): selected = self.__getSelectedType() export = self.__getExport(selected) clipboard = QtWidgets.QApplication.clipboard() if export is not None: clipboard.setText(self.__getExport(selected)) elif selected == "csv": s = BytesIO() np.savetxt(s, self.__data, delimiter=",") clipboard.setText(s.getvalue().decode("utf-8"))