Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python VTK,Mayavi错误:所有的“按钮释放事件”都失败了,但是所有的“按钮释放事件”都工作了吗? 我想在mayavi图形中捕获鼠标释放事件。具体来说,我需要单击一个对象,旋转它,然后在鼠标释放时接收输入。_Python_Events_Mouseevent_Vtk_Mayavi - Fatal编程技术网

Python VTK,Mayavi错误:所有的“按钮释放事件”都失败了,但是所有的“按钮释放事件”都工作了吗? 我想在mayavi图形中捕获鼠标释放事件。具体来说,我需要单击一个对象,旋转它,然后在鼠标释放时接收输入。

Python VTK,Mayavi错误:所有的“按钮释放事件”都失败了,但是所有的“按钮释放事件”都工作了吗? 我想在mayavi图形中捕获鼠标释放事件。具体来说,我需要单击一个对象,旋转它,然后在鼠标释放时接收输入。,python,events,mouseevent,vtk,mayavi,Python,Events,Mouseevent,Vtk,Mayavi,尝试: 标准的mayavi鼠标拾取无法检测到此类行为(请参见下面代码中的方法1) 但是,vtk(mayavi的构建基础)确实有一个特定的leftButtonReleaseeEvent()函数。这些知识可在以下网址找到: 我在下面编写了一段代码,可以有效地使用此在线文档,并可以从该列表中调用类似的函数:LeftButtonPressEvent()(请参见下面的方法2)。虽然leftButtonPresseEvent()可以工作,但不知何故leftButtonReleaseeEvent()却不能工

尝试:

标准的mayavi
鼠标拾取
无法检测到此类行为(请参见下面代码中的
方法1

但是,vtk(mayavi的构建基础)确实有一个特定的
leftButtonReleaseeEvent()
函数。这些知识可在以下网址找到:

我在下面编写了一段代码,可以有效地使用此在线文档,并可以从该列表中调用类似的函数:
LeftButtonPressEvent()
(请参见下面的
方法2
)。虽然
leftButtonPresseEvent()
可以工作,但不知何故
leftButtonReleaseeEvent()
却不能工作(中间的右键单击也是如此)

我已经绞尽脑汁好几天了——除了这是一个直截了当的错误之外,还有人知道吗?任何人都可以在自己的计算机上测试以确保安全吗

from __future__ import print_function
import numpy as np
from mayavi import mlab
from tvtk.api import tvtk

###################
### mayavi section:

fig1 = mlab.figure(1)
mlab.test_contour3d()
mlab.title('click me')

##############
# approach 1:
#def picker_callback(picker_obj):
    #print('click recieved')   
#fig1.on_mouse_pick(picker_callback)

##############
# approach 2:
def press_callback(vtk_obj, event):
    print('pressed')
def release_callback(vtk_obj, event):
    print('released')

fig1.scene.interactor.add_observer('LeftButtonPressEvent', press_callback) #works
fig1.scene.interactor.add_observer('LeftButtonReleaseEvent', release_callback) #doesn't work

mlab.show()

非常感谢@FelipeLema在评论中给出了这个很棒的答案!我已经将他的建议结合到以前编写的代码中,以模拟自然的
鼠标释放事件:

from __future__ import print_function
import numpy as np
from mayavi import mlab
from tvtk.api import tvtk

###################
### mayavi section:

fig1 = mlab.figure(1)
mlab.test_contour3d()
mlab.title('click me')

click_on = 0

def press_callback(vtk_obj, event):
    global click_on
    click_on = 1
    print('pressed')

def release_callback(vtk_obj, event):
    global click_on
    if click_on == 1:
        print('released')
        click_on = 0

fig1.scene.interactor.add_observer('LeftButtonPressEvent', press_callback)
#fig1.scene.interactor.add_observer('LeftButtonReleaseEvent', release_callback) #doesn't work
fig1.scene.interactor.add_observer('EndInteractionEvent', release_callback) #solution!! (with above setup)

mlab.show()

非常感谢@FelipeLema在评论中给出了这个很棒的答案!我已经将他的建议结合到以前编写的代码中,以模拟自然的
鼠标释放事件:

from __future__ import print_function
import numpy as np
from mayavi import mlab
from tvtk.api import tvtk

###################
### mayavi section:

fig1 = mlab.figure(1)
mlab.test_contour3d()
mlab.title('click me')

click_on = 0

def press_callback(vtk_obj, event):
    global click_on
    click_on = 1
    print('pressed')

def release_callback(vtk_obj, event):
    global click_on
    if click_on == 1:
        print('released')
        click_on = 0

fig1.scene.interactor.add_observer('LeftButtonPressEvent', press_callback)
#fig1.scene.interactor.add_observer('LeftButtonReleaseEvent', release_callback) #doesn't work
fig1.scene.interactor.add_observer('EndInteractionEvent', release_callback) #solution!! (with above setup)

mlab.show()

您确定要在鼠标释放时调用某些内容吗?“pick”回调在您松开鼠标按钮时被调用(按下鼠标按钮后不会移动)@FelipeLema这个事实让我很兴奋,这是一个好主意,但事实证明,只有在鼠标打开和关闭之间没有鼠标移动时,它才起作用。我需要的是用户抓住一个对象(鼠标打开),旋转它,然后释放(鼠标关闭),在这个对象上绘图需要执行一个命令。@FelipeLema我已经从头开始更新了我的方法并编辑了我的初始帖子-代码现在尽可能简单,并隔离了直接错误。您有什么见解可以帮助您吗?您应该尝试
EndInteractionEvent
而不是
leftButtonReleaseeEvent
。来源:@FelipeLema谢谢!!令人惊讶的帮助,我更新了一个答案,提供了完整的解决方案,同时忽略了所有其他事件(如缩放等)。您确定要在鼠标释放时调用某些内容吗?“pick”回调在您松开鼠标按钮时被调用(按下鼠标按钮后不会移动)@FelipeLema这个事实让我很兴奋,这是一个好主意,但事实证明,只有在鼠标打开和关闭之间没有鼠标移动时,它才起作用。我需要的是用户抓住一个对象(鼠标打开),旋转它,然后释放(鼠标关闭),在这个对象上绘图需要执行一个命令。@FelipeLema我已经从头开始更新了我的方法并编辑了我的初始帖子-代码现在尽可能简单,并隔离了直接错误。您有什么见解可以帮助您吗?您应该尝试
EndInteractionEvent
而不是
leftButtonReleaseeEvent
。来源:@FelipeLema谢谢!!惊人的帮助,我更新了一个答案,提供了完整的解决方案,同时忽略了所有其他事件(如缩放等)