我正在尝试学习vtk和pyqt。出于这个原因,我通过以下两个例子并在python中实现了第一个例子。
然而,当我试图在QMainWindow中实现DICOM系列时,我遇到了一个问题。虽然我没有得到任何错误,但没有任何错误。
我厌倦了实现查看器的不同方式,但这是我最后一次没有交互的简化版本。
from PyQt5.QtWidgets import *
import vtk
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
import sys
def main():
app = QApplication(sys.argv)
# creat window
main_window = QMainWindow()
iwidget = QVTKRenderWindowInteractor(main_window)
main_window.setCentralWidget(iwidget)
# set up dicom reader
reader = vtk.vtkDICOMImageReader()
reader.SetDirectoryName('digest_article')
reader.Update()
# initialize renderer
renderer = vtk.vtkRenderer()
# set up mapper
slice_mapper = vtk.vtkImageSliceMapper()
slice_mapper.SetInputConnection(reader.GetOutputPort())
# set random slice number
slice_mapper.SetSliceNumber(5)
# get render window from QVTKRenderWindowInteractor
render_window = iwidget.GetRenderWindow()
# add renderer to render window
render_window.AddRenderer(renderer)
# set up image_slice
image_slice = vtk.vtkImageSlice()
image_slice.SetMapper(slice_mapper)
# set up window and level of image_slice
MinMax = reader.GetOutput().GetScalarRange()
image_slice_property = image_slice.GetProperty()
image_slice_property.SetColorWindow(MinMax[1])
image_slice_property.SetColorLevel((MinMax[1] - MinMax[0]) / 2)
image_slice.Update()
# set image_slice as input for renderer
renderer.AddViewProp(image_slice)
# show window
main_window.show()
render_window.Render()
renderer.ResetCamera()
render_window.Render()
app.exec_()
if __name__ == '__main__':
main()
上述功能会导致输出结束。
由于没有错误,我怀疑我错误地初始化了渲染,或者我错过了什么。
你认为问题出在初始化上吗?
如何在vtk中初始化渲染,特别是关于上面的例子?
我也很感激其他理论。
答案 0 :(得分:0)
我认为您应该创建渲染窗口交互器。 尝试:
iren = render_window.GetInteractor()
然后在最后初始化交互器
iren.Initialize()