diff --git a/nixview/communicator.py b/nixview/communicator.py index 5d4d084..8d32f22 100644 --- a/nixview/communicator.py +++ b/nixview/communicator.py @@ -12,5 +12,7 @@ class Communicate(QObject): plot_error = pyqtSignal(str) + table_error = pyqtSignal(str) + communicator = Communicate() diff --git a/nixview/data_models/table_model.py b/nixview/data_models/table_model.py new file mode 100644 index 0000000..2f427c1 --- /dev/null +++ b/nixview/data_models/table_model.py @@ -0,0 +1,49 @@ +from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QSize, QVariant +import numpy as np + + +class TableModel (QAbstractTableModel): + + def __init__(self, file_handler, data_view, page=0, parent=None) -> None: + super(TableModel, self).__init__(parent) + self._file_handler = file_handler + self._data_view = data_view + self._page = page + self._cols = self._data_view.full_shape[1] if len(self._data_view.full_shape) > 1 else 1 + self._rows = self._data_view.full_shape[0] + self.insertColumns(0, self._cols) + self.insertRows(0, self._rows) + self._slice = [0 for i in range(len(self._data_view.full_shape))] + if len(self._data_view.full_shape) > 2: + self._slice[-1] = self._page + """ + if (array.getDimension(1).dimensionType() == nix::DimensionType::Set) { + v_labels = array.getDimension(1).asSetDimension().labels(); + } + if (shape.size() > 1) { + if (array.getDimension(2).dimensionType() == nix::DimensionType::Set) { + h_labels = array.getDimension(2).asSetDimension().labels(); + } + } + """ + + def rowCount(self, parent): + return self._rows + + def columnCount(self, parent): + return self._cols + + def data(self, index, role): + if not index.isValid() or role != Qt.DisplayRole: + return None + + d = "" + if (index.row() < self._rows) and (index.column() < self._cols): + self._slice[0] = index.row() + if len(self._slice) == 2: + self._slice[1] = index.column() + d = self._data_view._buffer[tuple(self._slice)] + + return str(np.round(d, 5)) + + diff --git a/nixview/ui/tablescreen.py b/nixview/ui/tablescreen.py index 62d6473..2b4db9a 100644 --- a/nixview/ui/tablescreen.py +++ b/nixview/ui/tablescreen.py @@ -1,8 +1,10 @@ -from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTableWidget +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTableView from PyQt5.QtCore import pyqtSignal, Qt from nixview.util.file_handler import FileHandler - +from nixview.util.dataview import DataView +from nixview.communicator import communicator +from nixview.data_models.table_model import TableModel class TableScreen(QWidget): close_signal = pyqtSignal() @@ -11,7 +13,9 @@ class TableScreen(QWidget): super().__init__(parent=parent) self._file_handler = FileHandler() - self.table = QTableWidget() + self.table = QTableView() + self.table.setSortingEnabled(False) + self.table.setShowGrid(True) close_btn = QPushButton("close") close_btn.clicked.connect(self.on_close) @@ -21,12 +25,16 @@ class TableScreen(QWidget): self.layout().addWidget(close_btn) self._data_view = None - self._software_slide = False - self.plotter = None - def on_close(self): self.close_signal.emit() - def show(self, item_descriptor): - print("Table show") - pass + def show(self, item): + try: + self._data_view = DataView(item, self._file_handler) + except ValueError as e: + communicator.table_error.emit("error in tablescreen.show %s" % e) + return + if self._data_view is None: + return + data_model = TableModel(self._file_handler, self._data_view) + self.table.setModel(data_model)