簡體   English   中英

使用Pyside - VTK和QVTKRenderWindowInteractor

[英]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類。 首先,進入這里:

https://svn.enthought.com/enthought/browser/Mayavi/trunk/enthought/tvtk/pyface/ui/qt4/QVTKRenderWindowInteractor.py?rev=20906

你可以做兩件事。

第一種選擇:

一個。 像往常一樣創建Qt窗口。

創建QVTKRenderWindowInteractor的實例,並將其父級設置為要包含它的窗口小部件/窗口。

self.myViewer= QVTKRenderWindowInteractor(self.parentWidget)

QVTKRenderWindowInteractor是vtkRenderWindowInteractor的包裝器,你可以得到這樣的渲染窗口:

self.myViewer.GetRenderWindow()

第二種選擇:

您可以使用QtDesigner將窗口小部件升級為QVTKRenderWindowInteractor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM