pyqt6+vtk

本文介绍了如何在PyQt6应用中集成VTK9.2.6进行3D渲染。首先通过pip安装所需库,然后在QtDesigner中创建水平布局并添加QVTKRenderWindowInteractor组件。接着通过pyuic将UI文件转换为Python代码。在main.py中,创建vtkSphereSource,设置渲染器和交互器,并启动交互。注意,初始化和结束交互器操作是关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里用PyQt6+vtk9.2.6

pip install PyQt6 pyqt6-tools vtk

这里拉了一个水平布局
然后水平布局中加入QWidget,object name改为vtkWidget
在这里插入图片描述
右键Promote Widgets
Promoted class name: QVTKRenderWindowInteractor
Header file: vtkmodules.qt.QVTKRenderWindowInteractor
点击Add,然后Promote
在这里插入图片描述

最终的ui如下

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QWidget" name="horizontalLayoutWidget">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>401</width>
     <height>301</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <widget class="QVTKRenderWindowInteractor" name="vtkWidget" native="true"/>
    </item>
   </layout>
  </widget>
 </widget>
 <customwidgets>
  <customwidget>
   <class>QVTKRenderWindowInteractor</class>
   <extends>QWidget</extends>
   <header>vtkmodules.qt.QVTKRenderWindowInteractor</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

在这里插入图片描述

然后通过pyuic转成py

python -m PyQt6.uic.pyuic MyWidget.ui -o MyWidget.py

然后就是main.py了

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# noinspection PyUnresolvedReferences
import vtkmodules.vtkInteractionStyle
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from PyQt6 import QtGui
from PyQt6.QtWidgets import QWidget, QApplication
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkRenderingCore import (
    vtkActor,
    vtkPolyDataMapper,
    vtkRenderer
)

from MyWidget import Ui_Form


class MyWindow(QWidget, Ui_Form):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setupUi(self)

        # Create source
        source = vtkSphereSource()
        source.SetCenter(0, 0, 0)
        source.SetRadius(5.0)

        # Create a mapper
        mapper = vtkPolyDataMapper()
        mapper.SetInputConnection(source.GetOutputPort())

        # Create an actor
        actor = vtkActor()
        actor.SetMapper(mapper)

        self.ren = vtkRenderer()
        self.ren.AddActor(actor)

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

        self.ren.ResetCamera()

        self.iren.Initialize()
        self.iren.Start()

    def closeEvent(self, event: QtGui.QCloseEvent) -> None:
        self.vtkWidget.Finalize()


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()

效果
在这里插入图片描述

注意事项:
这2句一定要写

import vtkmodules.vtkInteractionStyle
import vtkmodules.vtkRenderingOpenGL2

然后就是这个初始化也一定要写

self.iren.Initialize()
self.iren.Start()

最后的Finalize()也是

参考:
https://kitware.github.io/vtk-examples/site/Python/Widgets/EmbedInPyQt/
https://kitware.github.io/vtk-examples/site/Python/Tutorial/Tutorial_Step5/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nightmare004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值