【问题标题】:How to add a eventFilter in Maya如何在 Maya 中添加事件过滤器
【发布时间】:2019-09-30 14:03:16
【问题描述】:

我想使用自定义 Qt 窗口和 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 中执行的每个动作都会看到一个新行,但由于某种原因,我什么也没看到,没有错误也没有打印消息。所以我想事件没有被过滤或者事件被另一个小部件带走。有人知道如何解决这个问题吗?

【问题讨论】:

  • 有效,感谢您的快速答复。如果您将其发布为 asnwer,我可以将其标记为解决方案。

标签: python maya pyside2


【解决方案1】:

在 PySide2 中,如果对象未分配给变量,GC 会将其删除,因此在您的情况下,您必须执行以下操作:

obj = FilterObject() 
mainWin.installEventFilter(obj)

【讨论】:

    猜你喜欢
    • 2013-06-24
    • 2021-03-14
    • 2021-05-25
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多