qt_tabs.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import sys
  2. from PyQt5 import QtCore, QtWidgets
  3. from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
  4. from vedo import Mesh, dataurl, Plotter
  5. from vedo.pyplot import np, plot
  6. try:
  7. _encoding = QtWidgets.QApplication.UnicodeUTF8
  8. def _translate(context, text, disambig):
  9. return QtWidgets.QApplication.translate(context, text, disambig, _encoding)
  10. except AttributeError:
  11. def _translate(context, text, disambig):
  12. return QtWidgets.QApplication.translate(context, text, disambig)
  13. class Ui_MainWindow(object):
  14. def setupUi(self, MainWindow):
  15. MainWindow.setObjectName("MainWindow")
  16. MainWindow.resize(800, 600)
  17. self.centralwidget = QtWidgets.QWidget(MainWindow)
  18. self.centralwidget.setObjectName("centralwidget")
  19. self.tab1 = QtWidgets.QWidget()
  20. self.tab1.setObjectName("tab1")
  21. self.gridLayout1 = QtWidgets.QGridLayout(self.tab1)
  22. self.vtkLayout1 = QtWidgets.QVBoxLayout()
  23. self.vtkLayout1.setObjectName("vtkLayout1")
  24. self.gridLayout1.addLayout(self.vtkLayout1, 0, 0, 1, 1)
  25. self.tab2 = QtWidgets.QWidget()
  26. self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
  27. self.tabWidget.addTab(self.tab1, "tab1")
  28. self.tabWidget.addTab(self.tab2, "tab2")
  29. self.verticalLayout = QtWidgets.QVBoxLayout()
  30. self.verticalLayout.addWidget(self.tabWidget)
  31. self.gridLayout2 = QtWidgets.QGridLayout(self.centralwidget)
  32. self.gridLayout2.addLayout(self.verticalLayout, 0, 0, 1, 1)
  33. MainWindow.setCentralWidget(self.centralwidget)
  34. self.menubar = QtWidgets.QMenuBar(MainWindow)
  35. self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 31))
  36. MainWindow.setMenuBar(self.menubar)
  37. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  38. MainWindow.setStatusBar(self.statusbar)
  39. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
  40. self.tabWidget.setTabText(
  41. self.tabWidget.indexOf(self.tab1), _translate("MainWindow", "Tab 1", None)
  42. )
  43. self.tabWidget.setTabText(
  44. self.tabWidget.indexOf(self.tab2), _translate("MainWindow", "Tab 2", None)
  45. )
  46. self.tabWidget.setCurrentIndex(0)
  47. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  48. class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
  49. def __init__(self, parent=None):
  50. QtWidgets.QMainWindow.__init__(self, parent)
  51. self.setupUi(self)
  52. self.vtkWidget1 = QVTKRenderWindowInteractor(self)
  53. self.vtkLayout1.addWidget(self.vtkWidget1)
  54. self.plt1 = Plotter(qt_widget=self.vtkWidget1, axes=1)
  55. self.id2 = self.plt1.add_callback("key press", self.onKeypress)
  56. self.plt1 += Mesh(dataurl+'shark.ply').c('cyan')
  57. self.plt1.show()
  58. self.vtkWidget2 = QVTKRenderWindowInteractor(self)
  59. self.verticalLayout.addWidget(self.vtkWidget2)
  60. self.plt2 = Plotter(qt_widget=self.vtkWidget2)
  61. #####################################################
  62. # add a plot using a formatted Figure
  63. x = np.random.randn(100) + 10
  64. y = np.random.randn(100) * 20 + 20
  65. fig = plot(
  66. x, y,
  67. lw=0, # do not join points with lines
  68. xtitle="variable x",
  69. ytitle="variable y",
  70. marker="*", # marker style
  71. mc="dr", # marker color
  72. aspect=16/9, # aspect ratio
  73. )
  74. self.plt2 += fig
  75. ##################################################### show
  76. self.plt2.show(zoom=1.8, mode='image')
  77. def onClose(self):
  78. self.vtkWidget1.close()
  79. def onKeypress(self, evt):
  80. print("You have pressed key:", evt.keypress)
  81. if evt.keypress=='q':
  82. sys.exit(0)
  83. if __name__ == "__main__":
  84. app = QtWidgets.QApplication(sys.argv)
  85. window = MainWindow()
  86. app.aboutToQuit.connect(window.onClose)
  87. window.show()
  88. sys.exit(app.exec_())