# are reflected in the data table self._data.iloc[index.row(),index.column()] = value print(self._data) print("data committed : " , self._data.values[index.row()][index.column()]) self.dataChanged.emit(index, index) return True return None def updateData(self, new_dataframe): # quick hack, not sure whether the dataChanged signal I am emitting # is consistent with expectations self._data=new_dataframe self.dataChanged.emit(0,0) for i in range(len(new_dataframe)): self.dataChanged.emit(i,i) def flags(self, index): flags = super(self.__class__,self).flags(index) flags |= Qt.ItemIsSelectable flags |= Qt.ItemIsEnabled return flags if __name__ == '__main__': app = QApplication(sys.argv) model = pandasModel(df) view = QTableView() view.setModel(model) view.resize(800, 600) view.show() sys.exit(app.exec_())
np.random.seed(1) viewer = napari.Viewer() blobs = data.binary_blobs(length=128, volume_fraction=0.1, n_dim=2) labeled = ndi.label(blobs)[0] # Measure some properties of the blobs and create a DataFrame measurements = regionprops_table(label_image=labeled, properties=('label', 'area', 'eccentricity', 'solidity')) df = pd.DataFrame(measurements) # Create a Qt TableView from the pandas table model = pandasModel( df[df.label == 1]) # dirty hack so we just have a one-row table view = QTableView() view.setModel(model) view.resize(800, 200) view.show() text = QtWidgets.QLabel("") text.show() labels_layer = viewer.add_labels(labeled, name='blob ID') @viewer.mouse_drag_callbacks.append def get_ndisplay(viewer, event): if 'Alt' in event.modifiers: print('viewer display ', viewer.dims.ndisplay) @labels_layer.mouse_move_callbacks.append def move(layer, event): #print(event.pos) label_nr = layer.get_value() subset = df[df["label"] == label_nr]