Have no problems with your code on Windows. Maybe you could try to add few lines to the end of your code to look like:
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): app.exec_() app.deleteLater() sys.exit() On Wed, Mar 1, 2017 at 3:45 PM, 'Fabian Isensee' via pyqtgraph < [email protected]> wrote: > Hey there, > I implemented a very basic image viewer that is supposed to show a batch > of image stacks that are synced together, meaning that the same slice > number should be displayed for all stacks. The viewer runs very well, but I > get a Segmentation fault (core dumped) after closing the application. I > have been trying to fix this for a while now but don't find the mistake. > Your help would be very much appreciated! > Here is my code. It runs out of the box (displays random noise). > Cheers, > Fabian > > from pyqtgraph.Qt import QtGui, QtCore > import pyqtgraph as pg > import sys > import numpy as np > > class ImageViewer2DWidget(QtGui.QWidget): > def __init__(self, width=300, height=300): > QtGui.QWidget.__init__(self) > self.image = None > self.init(width, height) > > def init(self, width, height): > self.rect = QtCore.QRect(0, 0, width, height) > self.imageItem = pg.ImageItem() > self.imageItem.setImage(None) > > self.graphicsScene = pg.GraphicsScene() > self.graphicsScene.addItem(self.imageItem) > > self.graphicsView = pg.GraphicsView() > self.graphicsView.setRenderHint(QtGui.QPainter.Antialiasing) > self.graphicsView.setScene(self.graphicsScene) > > layout = QtGui.QHBoxLayout() > layout.addWidget(self.graphicsView) > self.setLayout(layout) > self.setMaximumSize(width, height) > self.setMinimumSize(width-10, height-10) > > def setImage(self, image): > assert len(image.shape) == 2 or len(image.shape) == 3 > if len(image.shape) == 4: > assert image.shape[-1] == 4 > self.image = image > self.imageItem.setImage(self.image) > self.imageItem.setRect(self.rect) > > def setLevels(self, levels, update=True): > self.imageItem.setLevels(levels, update) > > class ImageSlicingWidget(ImageViewer2DWidget): > def __init__(self, width=300, height=300): > self.slice = 0 > ImageViewer2DWidget.__init__(self, width, height) > > def setImage(self, image): > assert len(image.shape) == 3 or len(image.shape) == 4 > if len(image.shape) == 4: > assert image.shape[-1] == 4 > self.image = image > self._updateImageSlice() > > def _updateImageSlice(self): > self.imageItem.setImage(self.image[self.slice]) > self.imageItem.setRect(self.rect) > > def setSlice(self, slice): > slice = np.max((0, slice)) > slice = np.min((slice, self.image.shape[0] - 1)) > self.slice = slice > self._updateImageSlice() > > def getSlice(self): > return self.slice > > class BatchViewer(QtGui.QWidget): > def __init__(self, width=300, height=300): > QtGui.QWidget.__init__(self) > self.batch = None > self.width = width > self.height = height > self.slicingWidgets = {} > self._init_gui() > > def setBatch(self, batch): > assert len(batch.shape) == 4 > for v in self.slicingWidgets.values(): > self._my_layout.removeWidget(v) > self.slicingWidgets = {} > > self.batch = batch > for i in range(self.batch.shape[0]): > w = ImageSlicingWidget(self.width, self.height) > w.setImage(self.batch[i]) > w.setLevels([self.batch[i].min(), self.batch[i].max()]) > w.setSlice(0) > self._my_layout.addWidget(w) > self.slicingWidgets[i] = w > > def _init_gui(self): > self._my_layout = QtGui.QHBoxLayout() > self.slicingWidgets = {} > self.setLayout(self._my_layout) > self.setWindowTitle("Batch Viewer") > > def wheelEvent(self, QWheelEvent): > for v in self.slicingWidgets.values(): > v.setSlice(v.getSlice() + QWheelEvent.delta()/120) > > > > if __name__ == '__main__': > app = QtGui.QApplication(sys.argv) > sv = BatchViewer() > batch = np.random.random((5, 300, 300, 300)) > sv.setBatch(batch) > sv.show() > if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): > app.exec_() > # import IPython > # IPython.embed() > > -- > You received this message because you are subscribed to the Google Groups > "pyqtgraph" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/pyqtgraph/f99676ac-41d0-462f-b869-938f89a15bc1%40googlegroups.com > <https://groups.google.com/d/msgid/pyqtgraph/f99676ac-41d0-462f-b869-938f89a15bc1%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "pyqtgraph" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/CAD_qyJoSbofzJOJkHpO7ZSTWwPNMoy0QUzf21umRax79t1_Zaw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
