Windows下VTK中的Arrowkey事件

2024-09-28 03:14:18 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么在Windows上箭头键按下事件没有转发到VTKrenderWindowInteractior?有解决办法吗?Windows和Mac上的箭头键事件有什么区别吗?在

我可以用下面的示例代码重现这个问题。在Mac OS上,如果我按箭头键,我会看到“上”、“下”、“左”和“右”。但是在Windows上,我看不到任何东西(没有输入回调)。我想知道为什么会这样。在

我将vtk6.2.0用于python2.7。我在windowsserver2012(类似于windows8)和windows7(在虚拟机上)上进行了测试,显示了相同的行为。在

# -*- coding: utf-8 -*-
import vtk
import sys

class ClickInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
    def __init__(self, parent=None):
            self.AddObserver("CharEvent",self.onKeyPressEvent)

    def onKeyPressEvent(self, renderer, event):        
        key = self.GetInteractor().GetKeySym()
        print key
        self.OnChar()

def run():
    sphereSource = vtk.vtkSphereSource()
    sphereSource.SetCenter(0.,0.,0.)
    sphereSource.SetRadius(1.)
    sphereSource.Update()

    sphereMapper = vtk.vtkPolyDataMapper()
    sphereMapper.SetInputConnection(sphereSource.GetOutputPort())

    sphereActor = vtk.vtkActor()
    sphereActor.SetMapper(sphereMapper)

    renderer = vtk.vtkRenderer()
    renderWindow = vtk.vtkRenderWindow()
    renderWindow.AddRenderer(renderer)

    renderWindowInteractor = vtk.vtkRenderWindowInteractor()
    renderWindowInteractor.SetRenderWindow(renderWindow)
    style = ClickInteractorStyle()
    renderWindowInteractor.SetInteractorStyle(style)
    style.SetCurrentRenderer(renderer)

    renderer.AddActor(sphereActor)
    renderWindow.Render()
    renderWindowInteractor.Start()



###############################################################################
# MAIN
###############################################################################
if __name__ == "__main__":
    try:
        run()
    except:
        print "Unexpected error: %s", sys.exc_info()[0]
        raise

Tags: importselfstylewindowsmacdef事件renderer

热门问题