java 嵌入vtk_在PyQT5窗口中嵌入VTK对象

本文介绍如何在PyQT5窗口中嵌入VTK对象,通过QVTKRenderWindowInteractor实现。内容包括创建renderer、mapper、actor,并在窗口中展示3D球体。同时提醒在复杂Qt应用中避免错误使用交互器的Start()方法,以免启动额外的事件循环。

当您调用方法 Start() 时,您正在启动事件循环,这意味着将不会执行以下指令 . 简单地说,在完成VTK管道之后,即在定义了actor,mappers等之后启动事件循环 .

它工作正常,但假设你有PyQt4 . 为了使用PyQt5,我做了一些改动 . 试试这个:

import sys

import vtk

from PyQt5 import QtCore, QtGui

from PyQt5 import Qt

from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor

class MainWindow(Qt.QMainWindow):

def __init__(self, parent = None):

Qt.QMainWindow.__init__(self, parent)

self.frame = Qt.QFrame()

self.vl = Qt.QVBoxLayout()

self.vtkWidget = QVTKRenderWindowInteractor(self.frame)

self.vl.addWidget(self.vtkWidget)

self.ren = vtk.vtkRenderer()

self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)

self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()

# Create source

source = vtk.vtkSphereSource()

source.SetCenter(0, 0, 0)

source.SetRadius(5.0)

# Create a mapper

mapper = vtk.vtkPolyDataMapper()

mapper.SetInputConnection(source.GetOutputPort())

# Create an actor

actor = vtk.vtkActor()

actor.SetMapper(mapper)

self.ren.AddActor(actor)

self.ren.ResetCamera()

self.frame.setLayout(self.vl)

self.setCentralWidget(self.frame)

self.show()

self.iren.Initialize()

self.iren.Start()

if __name__ == "__main__":

app = Qt.QApplication(sys.argv)

window = MainWindow()

sys.exit(app.exec_())

重要说明:如果您的qt应用程序变得越来越复杂并且您将在其中使用多个 QVTKRenderWindowInteractor 对象,请不要通过 Start() 方法调用交互器 . 否则,正如我之前提到的,你在qt应用程序中创建另一个不必要的事件循环( app.exec() 启动qt循环) . 在这种情况下,我认为你应该在声明必要的对象后调用 app.exec() . 可在以下链接中找到更多信息:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值