使用 PyQt5 vtk vtk球体 使用滑块 RGB 改变 Actor 颜色
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()