在Python3 + PyQt5中使用vtkResliceImageViewer或vtkImageViewer2

时间:2018-10-11 16:48:21

标签: python pyqt5 vtk qvtkwidget

我已经为vtkImageViewer编写了工作示例:

但是任何图像都不使用vtkImageViewer2或vtkResliceImageViewer呈现。已找到基于PyQt4+Python2.7的示例,但也无法获取渲染的图像(可能是由于库的版本错误)。

在Python中有这些类的示例吗?

import sys
import vtk
from PyQt5 import QtCore, QtGui
from PyQt5 import QtWidgets

from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent = None):
        QtWidgets.QMainWindow.__init__(self, parent)

        self.frame = QtWidgets.QFrame()
        self.vl = QtWidgets.QVBoxLayout()
        self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
        self.vl.addWidget(self.vtkWidget)

        pathDicomDir = "/path/to/dicom/data"
        reader = vtk.vtkDICOMImageReader()
        reader.SetDirectoryName(pathDicomDir)
        reader.Update()

        self.viewer = vtk.vtkImageViewer()
        # self.viewer = vtk.vtkImageViewer2()
        # self.viewer = vtk.vtkResliceImageViewer()
        self.viewer.SetInputData(reader.GetOutput())

        self.viewer.SetupInteractor(self.vtkWidget)
        self.viewer.SetRenderWindow(self.vtkWidget.GetRenderWindow())
        self.viewer.Render()
        self.frame.setLayout(self.vl)
        self.setCentralWidget(self.frame)

        self.show()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())        

1 个答案:

答案 0 :(得分:0)

只需使用

self.viewer = vtk.vtkImageViewer2()

并添加

self.vtkWidget.Initialize()

之后 self.show()