Hi all,
I’m trying write an application with a vtk windows.
Nevertheless, I have some difficulties to move and resize manually the scalar bar when I use pyqt5. Here’s my code:
# -*- coding: utf-8 -*- import sys from PyQt5 import QtWidgets, QtGui, QtCore, Qt from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import pyqtgraph import math import numpy import vtk import vtk.qt vtk.qt.QVTKRWIBase = "QGLWidget" from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor class Window(QtWidgets.QMainWindow): def __init__(self) : super(Window, self).__init__() self.setGeometry(250, 100, 900, 800) self.setWindowTitle("Interactive vtk exemple") extractAction = QtWidgets.QAction( "Leave",self) extractAction.setShortcut("Ctrl+Q") extractAction.setStatusTip('Leave application') extractAction.triggered.connect(qApp.quit) mainMenu = self.menuBar() fileMenu = mainMenu.addMenu('&File') fileMenu.addAction(extractAction) self.statusBar() self.home() def home(self): self.frame = QtWidgets.QFrame() self.setCentralWidget(self.frame) self.layout = QtWidgets.QGridLayout() self.frame.setLayout(self.layout) ## Source/reader reader = vtk.vtkUnstructuredGridReader() reader.SetFileName("stripComplex.vtk") reader.SetScalarsName("temperature") reader.Update() pointData = reader.GetOutput().GetPointData() drange = pointData.GetScalars().GetRange() print("a",drange[0]) print("b",drange[1]) colorFunction = vtk.vtkColorTransferFunction() colorFunction.SetColorSpaceToHSV() colorFunction.HSVWrapOff() colorFunction.AddRGBPoint(drange[0], 0.0, 0.0, 1.0) colorFunction.AddRGBPoint(drange[1], 1.0, 0.0, 0.0) ## Create a mapper Mapper = vtk.vtkDataSetMapper() Mapper.SetInputConnection(reader.GetOutputPort()) Mapper.SetScalarRange(drange) Mapper.SetLookupTable(colorFunction) ## Create an actor Actor = vtk.vtkActor() Actor.SetMapper(Mapper) prop = Actor.GetProperty() prop.SetAmbient(0.5) prop.EdgeVisibilityOn() prop.SetEdgeColor(0, 0, 0) prop.SetLineWidth(2) ## Renderer self.ren = vtk.vtkRenderer() self.ren.AddActor(Actor) self.ren.GetActiveCamera().SetPosition(2,0.5,10) self.ren.GetActiveCamera().SetFocalPoint(2,0.5,2) ## Windows renderer self.vtkWidget = QVTKRenderWindowInteractor(self.frame) self.renwin = self.vtkWidget.GetRenderWindow() self.renwin.AddRenderer(self.ren) self.layout.addWidget(self.vtkWidget,2,1) ## Interactor self.iren = self.renwin.GetInteractor() ## scalar bar scalarBar = vtk.vtkScalarBarActor() scalarBar.SetLookupTable( colorFunction ) ## scalar bar widget scalar_bar_widget = vtk.vtkScalarBarWidget() scalar_bar_widget.SetInteractor(self.iren) scalar_bar_widget.SetScalarBarActor(scalarBar) scalar_bar_widget.On() self.ren.AddActor(scalarBar) ## Slider 1 exemple self.slidAmplitude = QtWidgets.QSlider(QtCore.Qt.Vertical) self.slidAmplitude.setMinimum(0.0) self.slidAmplitude.setMaximum(100.0) self.slidAmplitude.setValue(5) self.slidAmplitude.setTickInterval(1) self.slidAmplitude.setTickPosition(2) self.layout.addWidget(self.slidAmplitude,2,0) ## Slider 2 exemple self.slidFrequence = QtWidgets.QSlider(QtCore.Qt.Horizontal) self.slidFrequence.setMinimum(0.0) self.slidFrequence.setMaximum(200.0) self.slidFrequence.setValue(50.0) self.slidFrequence.setTickPosition(1) self.slidFrequence.setTickInterval(1.0) self.layout.addWidget(self.slidFrequence,3,1) self.iren.Initialize() self.iren.Start() self.iren.Render() self.show() def run() : app = QtWidgets.QApplication(sys.argv) GUI = Window() sys.exit(app.exec())
run()
When i execute this code, i can interact with the geometry but not with the scalar bar.
Is there anything wrong? any suggestion?
Thanks