如何在 Maya 中添加事件过滤器
How to add a eventFilter in Maya
我想使用自定义 Qt Window 和 Maya 创建拖放功能。据我所知,唯一的解决方案是为 Maya Widget 添加一个 eventFilter。所以这就是我试图测试的:
import maya.OpenMayaUI as omui
from PySide2 import QtWidgets
from PySide2 import QtCore
from shiboken2 import wrapInstance
def getMainWindowPtr():
mayaMainWindowPtr = omui.MQtUtil.mainWindow()
mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QtWidgets.QMainWindow)
return mayaMainWindow
class FilterObject(QtCore.QObject):
def eventFilter(self, obj, event):
print "Event", obj, event, event.type()
if event.type() == QtCore.QEvent.KeyPress:
if not event.isAutoRepeat():
key = event.key()
print "Key", key
if key == QtCore.Qt.Key_A:
print 'A held'
return super(FilterObject, self).eventFilter(obj, event)
mainWin = getMainWindowPtr()
mainWin.installEventFilter(FilterObject())
我希望在 Maya 中为每个动作看到一个新行,但由于某种原因我没有看到任何东西,没有错误没有打印消息。所以我想事件没有被过滤或者事件被另一个小部件带走了。有人知道如何解决这个问题吗?
在 PySide2 中,如果对象未分配给变量,GC 会将其删除,因此在您的情况下,您必须执行以下操作:
obj = FilterObject()
mainWin.installEventFilter(obj)
我想使用自定义 Qt Window 和 Maya 创建拖放功能。据我所知,唯一的解决方案是为 Maya Widget 添加一个 eventFilter。所以这就是我试图测试的:
import maya.OpenMayaUI as omui
from PySide2 import QtWidgets
from PySide2 import QtCore
from shiboken2 import wrapInstance
def getMainWindowPtr():
mayaMainWindowPtr = omui.MQtUtil.mainWindow()
mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QtWidgets.QMainWindow)
return mayaMainWindow
class FilterObject(QtCore.QObject):
def eventFilter(self, obj, event):
print "Event", obj, event, event.type()
if event.type() == QtCore.QEvent.KeyPress:
if not event.isAutoRepeat():
key = event.key()
print "Key", key
if key == QtCore.Qt.Key_A:
print 'A held'
return super(FilterObject, self).eventFilter(obj, event)
mainWin = getMainWindowPtr()
mainWin.installEventFilter(FilterObject())
我希望在 Maya 中为每个动作看到一个新行,但由于某种原因我没有看到任何东西,没有错误没有打印消息。所以我想事件没有被过滤或者事件被另一个小部件带走了。有人知道如何解决这个问题吗?
在 PySide2 中,如果对象未分配给变量,GC 会将其删除,因此在您的情况下,您必须执行以下操作:
obj = FilterObject()
mainWin.installEventFilter(obj)