<div dir="ltr"><div>This a Â reply for Â the Â thread Â VTK and PyQt</div><div><br></div><a href="http://public.kitware.com/pipermail/vtkusers/2015-November/092811.html">http://public.kitware.com/pipermail/vtkusers/2015-November/092811.html</a><br><div><br></div><div>Unlike Â C++ , Â PyQt Â has a Â special Â way Â for Â VTK Â embedding</div><div><br></div><div>Please Â follow Â the Â instruction Â to Â create a Â custom Â defined Â Qt widget:</div><div>1.  Create a Â widget Â object in Â Qt Â Designer</div><div>2.  In Â the Â top Â right Â Object Â Inspector Â panel, Â right click Â  and Â select Â "Promote to..."</div><div>3. Â a. Base class Â name: QWidget, Â b.  Promoted class name: Â vtkWidget, Â c.  Header Â file: Â vtkWidget, Â click Â "add"</div><div>In Â this Â step, Â the Â promoted Â class name and Â header Â file Â need not to be the same, Â but Â for Â convention Â I Â usually Â set them Â to be Â in same name.</div><div>4.  Save the Â UI design Â in the Â folder Â where Â your Â project is Â in, Â I use Â main.ui Â for Â example</div><div>5. Â <span style="font-family:arial,sans-serif">In the Â python Â project, Â create Â the Â vtkWidget.py header file Â with following Â code:</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><div style="">import vtk</div><div style="">from PyQt4 import QtGui</div><div style="">from vtk.qt4.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor</div><div style="">from PyQt4.QtGui import QLabel</div><div style=""><br></div><div style="">class vtkWidget(QtGui.QWidget):</div><div style=""><br></div><div style="">  Â  def __init__(self, parent = None):</div><div style="">  Â  Â  Â  QtGui.QWidget.__init__(self, parent)</div><div style="">  Â  Â  Â  self.vbl = QtGui.QVBoxLayout()</div><div style=""><br></div><div style="">  Â  Â  Â  self.vtkWidget = QVTKRenderWindowInteractor(self)</div><div style="">  Â  Â  Â  self.vbl.addWidget(self.vtkWidget)</div><div style="">  Â  Â  Â Â </div><div style="">  Â  Â  Â  self.ren = vtk.vtkRenderer()</div><div style="">  Â  Â  Â  self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)</div><div style="">  Â  Â  Â  self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()</div><div style="">  Â  Â  Â  self.renWin = self.vtkWidget.GetRenderWindow()</div><div style="">  Â  Â  Â Â </div><div style="">  Â  Â  Â  self.vtkWidget.show()</div><div style="">  Â  Â  Â  self.iren.Initialize()</div><div style="">  Â  Â  Â  self.setLayout(self.vbl)</div></div><div><span style="font-family:arial,sans-serif"><br></span></div><div>6.  In the Â python Â project, Â create Â a Â main.py Â file Â with following Â code:</div><div><br></div><div>from PyQt4 import QtCore, QtGui, uic<br></div><div>import vtk<br></div><div>import sys</div><div><br></div><div>form_class = uic.loadUiType("main.ui")[0]<br></div><div><div>class Ui_MainWindow(QtGui.QMainWindow, form_class):</div><div>  Â  def __init__(self, parent=None):</div><div>  Â  Â  Â  QtGui.QMainWindow.__init__(self, parent)</div><div>  Â  Â  Â  self.setupUi(self)</div></div><div><br></div><div><div>  Â  Â  # setting renderer of 3D widget, object Â name Â of Â the Â vtkWidget Â in Â .ui Â file is Â called Â widget3D</div><div>  Â  Â  Â  self.ren3D = vtk.vtkRenderer()</div><div>  Â  Â  Â  self.widget3D.vtkWidget.GetRenderWindow().AddRenderer(self.ren3D)</div><div>  Â  Â  Â Â </div><div>  Â  Â  Â  # render window interactor property</div><div>  Â  Â  Â  self.iren = self.widget3D.vtkWidget.GetRenderWindow().GetInteractor()</div><div>  Â  Â  Â  self.iren.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())</div></div><div><br></div><div><div>  Â  def Exit(self):</div><div>  Â  Â  Â Â sys.exit(app.exec_())</div><div><br></div><div>app = QtGui.QApplication(sys.argv)</div><div>Ui_MainWindow = Ui_MainWindow(None)</div><div>Ui_MainWindow.show()</div><div>app.exec_()</div></div><div><br></div><div>7.  Follow Â vtk Â pipeline Â to Â create Â an Â vtkActor Â class , Â you Â can throw Â the Â actor Â into the Â vtkWidget Â by Â self.ren3D.AddActor() Â function.</div><div><br></div><div>Execute Â main.py Â and Â see Â if Â the Â widget Â worked fine.  With Â the Â uic Â load Â function, Â the Â UI Â can Â dynamically Â design Â with Qt Â Designer Â instead of Â pre-compilation.  Remember to save Â .ui Â file Â everytime after Â modification .</div></div>