issue_946.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import sys
  2. from PyQt5.QtWidgets import QMainWindow, QApplication, QFrame, QVBoxLayout
  3. from vtkmodules.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
  4. from vedo import dataurl, Volume, settings
  5. from vedo.applications import Slicer3DPlotter
  6. class MainWindow(QMainWindow):
  7. def __init__(self, parent=None):
  8. QMainWindow.__init__(self, parent)
  9. self.frame = QFrame()
  10. self.layout = QVBoxLayout()
  11. self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
  12. # Create renderer and add the vedo objects and callbacks
  13. self.vol = Volume(dataurl + "embryo.slc")
  14. self.plt = Slicer3DPlotter(
  15. volume=self.vol,
  16. cmaps=("gist_ncar_r", "jet", "Spectral_r", "hot_r", "bone_r"),
  17. use_slider3d=True,
  18. bg="blue1",
  19. bg2="blue9",
  20. qt_widget=self.vtkWidget,
  21. )
  22. self.cid1 = self.plt.add_callback("mouse click", self._trigger)
  23. self.plt.show()
  24. # Set-up the rest of the Qt window
  25. self.layout.addWidget(self.vtkWidget)
  26. self.frame.setLayout(self.layout)
  27. self.setCentralWidget(self.frame)
  28. self.show()
  29. def _trigger(self, evt):
  30. # print("You have clicked your mouse button. Event info:\n", evt)
  31. i = int(self.plt.xslider.value)
  32. j = int(self.plt.yslider.value)
  33. k = int(self.plt.zslider.value)
  34. print(i,j,k, type(self.vol.xslice(i)))
  35. def onClose(self):
  36. # Disable the interactor before closing to prevent it
  37. # from trying to act on already deleted items
  38. print("CLOSING")
  39. self.vtkWidget.close()
  40. if __name__ == "__main__":
  41. if settings.dry_run_mode:
  42. exit()
  43. app = QApplication(sys.argv)
  44. window = MainWindow()
  45. app.aboutToQuit.connect(window.onClose)
  46. window.show()
  47. sys.exit(app.exec())