如何在Maya中添加事件过滤器

4
我想创建一个自定义Qt窗口和Maya的拖放功能。根据我所了解到的,唯一的解决方案是为Maya小部件添加事件过滤器。因此,这就是我尝试测试它的方法:
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中每执行一次操作都能看到一个新行,但出于某些原因我没有看到任何东西,没有错误也没有打印信息。所以我认为事件没有被过滤或被另一个小部件取走了。有人知道如何解决这个问题吗?


可以的,谢谢你的快速回答。如果你把它发布为答案,我就可以将其标记为解决方案。 - haggi krey
1个回答

3
在PySide2中,如果对象未分配给变量,则GC会删除它,在您的情况下,您必须执行以下操作:
obj = FilterObject() 
mainWin.installEventFilter(obj)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接