def SetRenderWindow(self,w): """ SetRenderWindow(w: vtkRenderWindow) Set a new render window to QVTKWidget and initialize the interactor as well """ if w == self.mRenWin: return if self.mRenWin: if system.systemType!='Linux': self.mRenWin.SetInteractor(None) if self.mRenWin.GetMapped(): self.mRenWin.Finalize() self.mRenWin = w if self.mRenWin: self.mRenWin.Register(None) if self.mRenWin.GetMapped(): self.mRenWin.Finalize() if system.systemType=='Linux': display = None try: display = int(QtGui.QX11Info.display()) except TypeError: # This was changed for PyQt4.2 if isinstance(QtGui.QX11Info.display(), QtGui.Display): display = sip.unwrapinstance(QtGui.QX11Info.display()) if display is not None: v = vtk.vtkVersion() version = [v.GetVTKMajorVersion(), v.GetVTKMinorVersion(), v.GetVTKBuildVersion()] display = hex(display)[2:] if version < [5, 7, 0]: vp = ('_%s_void_p\0x00' % display) elif version < [6, 2, 0]: vp = ('_%s_void_p' % display) else: vp = ('_%s_p_void' % display) self.mRenWin.SetDisplayId(vp) self.resizeWindow(1,1) self.mRenWin.SetWindowInfo(str(int(self.winId()))) if self.isVisible(): self.mRenWin.Start() if not self.mRenWin.GetInteractor(): #iren = vtk.vtkRenderWindowInteractor() iren = QVTKRenderWindowInteractor() # if system.systemType=='Darwin': # iren.InstallMessageProcOff() iren.SetRenderWindow(self.mRenWin) iren.Initialize() # if system.systemType=='Linux': # system.XDestroyWindow(self.mRenWin.GetGenericDisplayId(), # self.mRenWin.GetGenericWindowId()) self.mRenWin.SetWindowInfo(str(int(self.winId()))) self.resizeWindow(self.width(), self.height()) self.mRenWin.SetPosition(self.x(), self.y())
class Ui_ReadDICOMSeriesQt(object): def setupUi(self, ReadDICOMSeriesQt): ReadDICOMSeriesQt.setObjectName(_fromUtf8("ReadDICOMSeriesQt")) ReadDICOMSeriesQt.resize(541, 531) self.centralWidget = QtGui.QWidget(ReadDICOMSeriesQt) self.centralWidget.setObjectName(_fromUtf8("centralWidget")) self.buttonOpenFolder = QtGui.QPushButton(self.centralWidget) self.buttonOpenFolder.setGeometry(QtCore.QRect(10, 430, 121, 24)) self.buttonOpenFolder.setObjectName(_fromUtf8("buttonOpenFolder")) self.sliderSlices = QtGui.QSlider(self.centralWidget) self.sliderSlices.setGeometry(QtCore.QRect(140, 430, 381, 23)) self.sliderSlices.setOrientation(QtCore.Qt.Horizontal) self.sliderSlices.setObjectName(_fromUtf8("sliderSlices")) self.labelFolderName = QtGui.QLabel(self.centralWidget) self.labelFolderName.setGeometry(QtCore.QRect(140, 470, 381, 15)) self.labelFolderName.setObjectName(_fromUtf8("labelFolderName")) self.labelSlicesNumber = QtGui.QLabel(self.centralWidget) self.labelSlicesNumber.setGeometry(QtCore.QRect(140, 500, 381, 15)) self.labelSlicesNumber.setObjectName(_fromUtf8("labelSlicesNumber")) self.labelSlicesNumberTitle = QtGui.QLabel(self.centralWidget) self.labelSlicesNumberTitle.setGeometry(QtCore.QRect(20, 500, 59, 15)) self.labelSlicesNumberTitle.setObjectName( _fromUtf8("labelSlicesNumberTitle")) self.labelFolderNameTitle = QtGui.QLabel(self.centralWidget) self.labelFolderNameTitle.setGeometry(QtCore.QRect(20, 470, 59, 15)) self.labelFolderNameTitle.setObjectName( _fromUtf8("labelFolderNameTitle")) self.qvtkWidget = QVTKRenderWindowInteractor(self.centralWidget) self.qvtkWidget.setGeometry(QtCore.QRect(10, 10, 521, 411)) self.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget")) ReadDICOMSeriesQt.setCentralWidget(self.centralWidget) self.reader = vtk.vtkDICOMImageReader() self.imageViewer = vtk.vtkImageViewer() self.interactor = vtk.vtkInteractorStyleImage() self.renderWindowInteractor = vtk.vtkRenderWindowInteractor() self.minSlice = 0 self.maxSlice = 0 self.fname = "" self.dicomfiles = [] self.retranslateUi(ReadDICOMSeriesQt) QtCore.QMetaObject.connectSlotsByName(ReadDICOMSeriesQt) def retranslateUi(self, ReadDICOMSeriesQt): ReadDICOMSeriesQt.setWindowTitle( _translate("ReadDICOMSeriesQt", "DICOM Series", None)) self.buttonOpenFolder.setText( _translate("ReadDICOMSeriesQt", "Open Folder", None)) self.labelFolderName.setText(_translate("ReadDICOMSeriesQt", "-", None)) self.labelSlicesNumber.setText( _translate("ReadDICOMSeriesQt", "-", None)) self.labelSlicesNumberTitle.setText( _translate("ReadDICOMSeriesQt", "Slices:", None)) self.labelFolderNameTitle.setText( _translate("ReadDICOMSeriesQt", "Folder:", None)) self.buttonOpenFolder.clicked.connect(self.openfolder) self.sliderSlices.valueChanged.connect(self.valuechange) def openfolder(self, ReadDICOMSeriesQt): self.fname = QtGui.QFileDialog.getExistingDirectory( None, 'Select a folder:', 'C:\\', QtGui.QFileDialog.ShowDirsOnly) self.labelFolderName.setText( _translate("ReadDICOMSeriesQt", self.fname, None)) self.dicomfiles = [ name for name in os.listdir(self.fname) if name.endswith(".dcm") ] self.dicomfiles.sort() num_files = len(self.dicomfiles) print(self.dicomfiles) self.sliderSlices.setMinimum(1) self.sliderSlices.setMaximum(num_files) self.drawdicomseries(ReadDICOMSeriesQt, self.fname, 0) def drawdicomseries(self, ReadDICOMSeriesQt, ndicom, slicenum): #self.reader.SetDirectoryName(ndicom) print(self.dicomfiles[slicenum]) self.reader.SetFileName(os.path.join(ndicom, self.dicomfiles[slicenum])) self.reader.Update() self.imageViewer.SetInputConnection(self.reader.GetOutputPort()) self.qvtkWidget.SetRenderWindow(self.imageViewer.GetRenderWindow()) #self.imageViewer.SetupInteractor(self.qvtkWidget.GetInteractor()) self.renderWindowInteractor.SetInteractorStyle(self.interactor) self.imageViewer.SetupInteractor(self.renderWindowInteractor) self.imageViewer.Render() #num_files = len(glob.glob1(ndicom,"*.dcm")) #self.minSlice = self.imageViewer.GetSliceMin() #self.maxSlice = self.imageViewer.GetSliceMax() def valuechange(self, ReadDICOMSeriesQt): size = self.sliderSlices.value() self.labelSlicesNumber.setText(str(size)) #self.imageViewer.SetSlice(size) #self.imageViewer.Render() self.drawdicomseries(ReadDICOMSeriesQt, self.fname, size - 1)