我正在尝试创建一个 qt vedo 应用程序,使用 QML 进行 UI 设计。但当我运行它时,按钮显示出来,但 vedo 绘图仪却没有显示。我只找到了使用帧缓冲区对象的 C++ 示例,但
我正在尝试创建一个 qt vedo 应用程序,使用 QML 进行 UI 设计。但是当我运行它时,按钮会显示,但 vedo 绘图仪不会显示。我只在 C++ 中找到了使用帧缓冲区对象的示例,但在 python 中没有找到。我对此完全陌生,因此非常感激任何能给我的帮助。目前使用 PyQT5.15.11 和 VTK 9.3.1。
主程序
from PyQt5.QtCore import QUrl
from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from vedo import Mesh, Plotter
from vtk import *
from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
import sys
class VedoWidget(QWidget):
def __init__(self, parent=None):
# Call super class constructor
super().__init__(parent)
# Set up layout
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# Set up VTK widget
self.vtkWidget = QVTKRenderWindowInteractor(self)
self.layout.addWidget(self.vtkWidget)
# Initialize Vedo plotter
self.plt = Plotter(qt_widget=self.vtkWidget, bg="white")
# Load a sample mesh
self.mesh = Mesh("assets/head.stl").c("lightgray")
self.plt.add(self.mesh)
# Show the VTK render window
self.vtkWidget.GetRenderWindow().AddRenderer(self.plt.renderer)
self.vtkWidget.GetRenderWindow().Render()
self.vtkWidget.GetRenderWindow().GetInteractor().Start()
if __name__ == "__main__":
# Create Qt application
app = QApplication(sys.argv)
# Create QML engine
engine = QQmlApplicationEngine()
# Register custom QML types
qmlRegisterType(VedoWidget, 'QtVTK', 1, 0, 'VedoWidget')
# Load main QML file
engine.load(QUrl('resources/main.qml'))
# Validate QML file loaded successfully
if not engine.rootObjects():
sys.exit(-1)
# Exit program gracefully
sys.exit(app.exec_())
主.qml
import QtQuick.Controls 2.15
import QtVTK 1.0
ApplicationWindow {
visible: true
width: 800
height: 600
Rectangle {
width: 800
height: 600
VedoWidget
{
}
}
Button {
text: "Click Me"
anchors.centerIn: parent
}
}