VTK:如何在项目中添加滚动条?

时间:2010-10-10 12:17:54

标签: vtk

向我的VTK项目添加滚动条的最简单方法是什么?

感谢

更新

def vtkSliderCallback2(obj, event):
    sliderRepres = obj.GetRepresentation()
    pos = sliderRepres.GetValue()
    contourFilter.SetValue(0, pos)

SliderRepres = vtk.vtkSliderRepresentation2D()
min = 0 #ImageViewer.GetSliceMin()
max = 256 #ImageViewer.GetSliceMax()
SliderRepres.SetMinimumValue(min)
SliderRepres.SetMaximumValue(max)
SliderRepres.SetValue((min + max) / 2)
SliderRepres.SetTitleText("Slice")
SliderRepres.GetPoint1Coordinate().SetCoordinateSystemToNormalizedDisplay()
SliderRepres.GetPoint1Coordinate().SetValue(0.2, 0.6)
SliderRepres.GetPoint2Coordinate().SetCoordinateSystemToNormalizedDisplay()
SliderRepres.GetPoint2Coordinate().SetValue(0.4, 0.6)

SliderRepres.SetSliderLength(0.02)
SliderRepres.SetSliderWidth(0.03)
SliderRepres.SetEndCapLength(0.01)
SliderRepres.SetEndCapWidth(0.03)
SliderRepres.SetTubeWidth(0.005)
SliderRepres.SetLabelFormat("%3.0lf")
SliderRepres.SetTitleHeight(0.02)
SliderRepres.SetLabelHeight(0.02)

SliderWidget = vtk.vtkSliderWidget()
SliderWidget.SetInteractor(iren)
SliderWidget.SetRepresentation(SliderRepres)
SliderWidget.KeyPressActivationOff()
SliderWidget.SetAnimationModeToAnimate()
SliderWidget.SetEnabled(True)
SliderWidget.AddObserver("InteractionEvent", vtkSliderCallback2)

1 个答案:

答案 0 :(得分:0)

只是为了完成,并为其他用户搜索。

如果您需要它来设置值,vtkSliderWidget将执行您想要的操作。

//根据你的编辑进行编辑 如果要获取值,则必须将事件连接到更改值时触发的滑块。比检索此值并相应地更新。在C ++中找到了一个例子here

//我实际上认为我的问题是当我滑动它时,每个拇指位置都会调用回调函数。怎么可以避免呢?换句话说,我只希望最后一个位置触发回调函数......

尝试将其耦合到EndInteractionEvent而不是InteractionEvent。

SliderWidget.AddObserver("EndInteractionEvent", vtkSliderCallback2)

// stuff

顺便说一下,如果你使用python和VTK并且需要GUI的东西,我建议你使用python QT和python qt小部件,这可以减轻很多这些东西。我的一个旧项目的一些代码使用QT + Python + VTK进行GUI + python的东西:

self.verticalSlider = QtGui.QSlider(self.centralwidget)
self.verticalSlider.setOrientation(QtCore.Qt.Vertical)
self.verticalSlider.setObjectName("verticalSlider")
self.horizontalLayout.addWidget(self.verticalSlider)

// connect slider to a method onValueChange
QObject.connect(self.verticalSlider, SIGNAL("valueChanged(int)"), 
self.setFibreVolumeOpacity)

def setFibreVolumeOpacity(self, value):
    // do stuff here with slider value.