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 ответ
Просто чтобы быть полным и для других пользователей прибегая к помощи вещей.
vtkSliderWidget будет делать то, что вы хотите, если вам нужно установить значение.
// редактирование на основе вашего редактирования Если вы хотите получить значение, вы должны подключить событие к ползунку, который срабатывает при изменении значения. Затем извлеките это значение и обновите соответственно. Пример в C++ находится здесь
// Я на самом деле думаю, что моя проблема в том, что функция обратного вызова вызывается для каждой позиции большого пальца, когда я ее сдвигаю. Как можно избежать этого? Другими словами, я хочу, чтобы только последняя позиция вызывала функцию обратного вызова...
Попробуйте связать его с EndInteractionEvent, а не с InteractionEvent.
SliderWidget.AddObserver("EndInteractionEvent", vtkSliderCallback2)
// материал
Кстати, если вы используете python и VTK и нуждаетесь в графическом интерфейсе, я советую вам использовать виджеты 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.