code: def __init__(self):
      QtWidgets.QMainWindow.__init__(self)
  
      self.resize(700, 500)
      self.setWindowTitle("vispy example ...")
  
      self.list_object = QtWidgets.QListWidget()
      self.list_object.setAlternatingRowColors(True)
      self.list_object.itemSelectionChanged.connect(
          self.list_objectChanged
      )
  
      self.list_object.addItems(list(OBJECT.keys()))
      self.props_widget = ObjectWidget(self)
      self.props_widget.signal_objet_changed.connect(self.update_view)
  
      self.splitter_v = QtWidgets.QSplitter(QtCore.Qt.Vertical)
      self.splitter_v.addWidget(self.list_object)
      self.splitter_v.addWidget(self.props_widget)
  
      self.canvas = Canvas()
      self.canvas.create_native()
      self.canvas.native.setParent(self)
      self.canvas.measure_fps(0.1, self.show_fps)
  
      # Central Widget
      splitter1 = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
      splitter1.addWidget(self.splitter_v)
      splitter1.addWidget(self.canvas.native)
  
      self.setCentralWidget(splitter1)
  
      # FPS message in statusbar:
      self.status = self.statusBar()
      self.status_label = QtWidgets.QLabel("...")
      self.status.addWidget(self.status_label)
  
      self.mesh = MyMeshData()
      self.update_view(self.props_widget.param)
  
imports: from PyQt5 import QtCore, QtWidgets
  import sys
  import numpy
  from vispy import app, gloo
  from vispy.util.transforms import perspective, translate, rotate
  from vispy.geometry import meshdata
  from vispy.geometry import generation
label_desc: Use image node_id 1 to create a new MainWindow object from inherited base classes: QtWidgets with example: obj = MainWindow()