使用 PyQt5 vtk  vtk球体 使用滑块 RGB 改变 Actor 颜色

pyqt Pyton VTK 使用 滑块 改变 VTK Actor 颜色_pyqt

 CODE

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import (QApplication, QCheckBox, QGridLayout, QGroupBox,
                             QMenu, QPushButton, QRadioButton, QVBoxLayout, QWidget, QSlider,QLineEdit,QLabel)
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import *
import vtk
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
#from PyQt5 import Qt
from PyQt5.QtCore import Qt #有一些常量在这里面,eg:blue
def window():

   ren = vtk.vtkRenderer()

   source = vtk.vtkSphereSource()
   source.SetCenter(0, 0, 0)
   source.SetRadius(1.0)

   app = QApplication(sys.argv)
   win = QWidget()

   Display_1 = QLCDNumber(3)
   Display_2 = QLCDNumber(3)
   Display_3 = QLCDNumber(3)

   Display_1.setSegmentStyle(QLCDNumber.Flat)
   Display_2.setSegmentStyle(QLCDNumber.Flat)
   Display_3.setSegmentStyle(QLCDNumber.Flat)

   Display_1.display(128)
   Display_2.display(128)
   Display_3.display(128)

   Slider_1 = QSlider(win)
   Slider_1.setMinimum(0)
   Slider_1.setMaximum(255)
   Slider_1.setValue(128)
   Slider_1.valueChanged.connect(Display_1.display)


   Slider_2 = QSlider(win)
   Slider_2.setMinimum(0)
   Slider_2.setMaximum(255)
   Slider_2.setValue(128)
   Slider_2.valueChanged.connect(Display_2.display)


   Slider_3 = QSlider(win)
   Slider_3.setMinimum(0)
   Slider_3.setMaximum(255)
   Slider_3.setValue(128)
   Slider_3.valueChanged.connect(Display_3.display)

   label_1 = QLabel("Label_R")
   label_1.setAlignment(Qt.AlignCenter)

   label_2 = QLabel("Label_G")
   label_2.setAlignment(Qt.AlignCenter)

   label_3 = QLabel("Label_B")
   label_3.setAlignment(Qt.AlignCenter)

   vbox = QVBoxLayout()


   vbox.addWidget(label_1)
   vbox.addWidget(Display_1)
   vbox.addWidget(Slider_1)

   vbox.addWidget(label_2)
   vbox.addWidget(Display_2)
   vbox.addWidget(Slider_2)

   vbox.addWidget(label_3)
   vbox.addWidget(Display_3)
   vbox.addWidget(Slider_3)

   vbox.addStretch()


   hbox = QHBoxLayout()

   frame = QFrame()
   frame.setFrameShape(QFrame.StyledPanel)
   frame.setFrameShape(QFrame.StyledPanel) # Application de la forme
   frame.setFrameShadow(QFrame.Raised) # application d'une ombre
   frame.setObjectName("frame") # Appellation du cadre

   #b3 = QtWidgets.QPushButton("Button3")
   #b4 = QtWidgets.QPushButton("Button4")
   hbox.addWidget(frame)
   hbox.addStretch()
   #hbox.addWidget(b4)

   vbox.addStretch()
   hbox.addLayout(vbox)
   win.setLayout(hbox)



   vtkWidget = QVTKRenderWindowInteractor(frame)
   vl =  QVBoxLayout()
   vl.addWidget(vtkWidget)


   vtkWidget.GetRenderWindow().AddRenderer(ren)
   iren = vtkWidget.GetRenderWindow().GetInteractor()



  # Create a mapper
   mapper = vtk.vtkPolyDataMapper()
   mapper.SetInputConnection(source.GetOutputPort())

  # Create an actor
   actor = vtk.vtkActor()
   actor.SetMapper(mapper)

   ren.AddActor(actor)
   ren.ResetCamera()
   frame.setLayout(vl)


   def handler():
       changevalue(Slider_1, Slider_2,Slider_3,actor)
       ren.ResetCamera()
       ren.Render()
       vtkWidget.GetRenderWindow().Render()

   Slider_1.valueChanged.connect(handler)
   Slider_2.valueChanged.connect(handler)
   Slider_3.valueChanged.connect(handler)

   #setCentralWidget(self.frame)
   #show()
   iren.Initialize()
   iren.Start()

   win.setWindowTitle("PyQt-vtkSphere")
   win.resize(743, 430)
   win.show()
   sys.exit(app.exec_())

def changevalue(slider1,slider2,slider3,actor):
   valueR  = slider1.value()
   valueG =  slider2.value()
   valueB =  slider3.value()

   print("RGB",valueR,valueG,valueB)
   #source.SetRadius(int(value))
   actor.GetProperty().SetColor(valueR/100.0,valueG/100.0,valueB/100.0)


if __name__ == '__main__':
   window()