![](/img/trans.png)
[英]Using vtkOrientationMarkerWidget with QVTKRenderWindowInteractor [PyQt4/PySide]
[英]Using Pyside - VTK and QVTKRenderWindowInteractor
我是設計GUI和Python的新手
我試圖在用QTDesign制作的簡單GUI中顯示渲染,但是沒有正確顯示。
渲染工作,但我希望渲染小部件在主窗口內(或在任何其他小部件內?)但不起作用。
有誰知道怎么做?
問候! 馬克西
用戶界面:
from PySide import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(455, 380)
MainWindow.setMinimumSize(QtCore.QSize(455, 380))
MainWindow.setMaximumSize(QtCore.QSize(455, 380))
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(365, 340, 75, 23))
self.pushButton.setObjectName("pushButton")
self.frame = QtGui.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(20, 20, 416, 306))
self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
self.frame.setFrameShadow(QtGui.QFrame.Raised)
self.frame.setObjectName("frame")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
主程序......
from Prueba_Viewer import Ui_MainWindow
import vtk
from PySide import QtGui
from PySide import QtCore
import sys
import os
from vtk.qt4.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
class MaxWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
#self.ui = Ui_main()
#self.ui.setupUi(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.meshDisplayWidget = QVTKRenderWindowInteractor(self.ui.frame)
self.ui.meshDisplayWidget.Initialize()
#Set actors and mappers, then instead of creating a renderwindowinteractor,
#use the self.ui.meshDisplayWidget to display the mesh. Also define picker, and
#set data source (for code about displaying a mesh from coordinates, as
#an unstructured grid.
cone = vtk.vtkConeSource()
cone.SetResolution(28)
coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInput(cone.GetOutput())
coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)
ren = vtk.vtkRenderer()
ren.AddActor(coneActor)
ren.ResetCamera()
cam1 = ren.GetActiveCamera()
self.ui.meshDisplayWidget.GetRenderWindow().AddRenderer(ren)
#self.ui.meshDisplayWidget.SetPicker(picker_point)
self.ui.meshDisplayWidget.show()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
maxwin = MaxWindow()
Max_Window = maxwin
maxwin.show()
exit_code = app.exec_()
sys.exit(exit_code)
你看到這個例子嗎? 它適用於我為PyQt交換PySide。 http://www.vtk.org/Wiki/VTK/Examples/Python/Widgets/EmbedPyQt
要在Widget內部渲染,請使用QVTKRenderWindowInteractor類。 首先,進入這里:
你可以做兩件事。
第一種選擇:
一個。 像往常一樣創建Qt窗口。
灣 創建QVTKRenderWindowInteractor的實例,並將其父級設置為要包含它的窗口小部件/窗口。
self.myViewer= QVTKRenderWindowInteractor(self.parentWidget)
QVTKRenderWindowInteractor是vtkRenderWindowInteractor的包裝器,你可以得到這樣的渲染窗口:
self.myViewer.GetRenderWindow()
第二種選擇:
您可以使用QtDesigner將窗口小部件升級為QVTKRenderWindowInteractor
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.