Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a eventFilter in Maya

I'd like to create an drag'n drop functionality with a custom Qt Window and Maya. From what I could find the only solution is to add a eventFilter for a Maya Widget. So this is what I tried to test it:

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())

I'd expect to see a new line for every acton I do in Maya, but for some reason I do not see anything, no error no print message. So I suppose the event is not filtered or the event is taken away by another widget. Does someone has an idea how to approach this problem?

like image 462
haggi krey Avatar asked Sep 03 '25 10:09

haggi krey


1 Answers

In PySide2 if the object is not assigned to a variable the GC deletes it, so in your case you must do the following:

obj = FilterObject() 
mainWin.installEventFilter(obj)
like image 152
eyllanesc Avatar answered Sep 05 '25 00:09

eyllanesc