Hi, thank you very much! That fixed the problem! Cheers, Fabian Am Mittwoch, 1. März 2017 23:54:34 UTC+1 schrieb Vasilije Mehandzic: > > 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] <javascript:>> 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] <javascript:>. >> 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/46491469-e570-4cc6-aff6-2e84ae2ed82d%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
