Why single click works, but double click does not?

Would anyone know to tell me why single click works, but double click does not, please?

import vtk

def left_button(obj, e):
    print(e)

source = vtk.vtkSphereSource()

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(source.GetOutputPort())

actor = vtk.vtkActor()
actor.SetMapper(mapper)

renderer = vtk.vtkRenderer()
renderer.AddActor(actor)

window = vtk.vtkRenderWindow()
window.AddRenderer(renderer)
window.SetSize(800, 600)

interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(window)
interactor.SetInteractorStyle(vtk.vtkInteractorStyleRubberBandPick())
# interactor.AddObserver('LeftButtonPressEvent', left_button)
interactor.AddObserver('LeftButtonDoubleClickEvent', left_button)
interactor.Start()

If you use Qt for your GUI then QVTKInteractorAdapter takes care of double-click events. Otherwise I think you need to implement detection of double-click events yourself, probably in the render window interactor.

Hi, @lassoan! I had already implemented double click using Qt, but I thought it was possible using the VTK event itself. Thanks for answering! :slightly_smiling_face:

This is the solution using Qt for anyone interested:

import sys
import vtk

from PyQt5.QtWidgets import QApplication, QMainWindow
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor

class MyQVTKRenderWindowInteractor(QVTKRenderWindowInteractor):

    def mouseDoubleClickEvent(self, event):
        print(event)

class MyQMainWindow(QMainWindow):

    def __init__(self):
        super(MyQMainWindow, self).__init__()
        source = vtk.vtkSphereSource()
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(source.GetOutputPort())
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        renderer = vtk.vtkRenderer()
        renderer.AddActor(actor)
        interactor = MyQVTKRenderWindowInteractor()
        interactor.GetRenderWindow().AddRenderer(renderer)
        interactor.Start()
        self.setCentralWidget(interactor)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyQMainWindow()
    win.show()
    sys.exit(app.exec_())