Как добавить eventFilter в Maya - PullRequest
       50

Как добавить eventFilter в Maya

2 голосов
/ 30 сентября 2019

Я бы хотел создать функциональность drag'n drop с пользовательским окном Qt и Maya. Из того, что я смог найти, единственное решение - добавить eventFilter для виджета 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, но по какой-то причине я ничего не вижу, ни ошибки, ни печатисообщение. Поэтому я предполагаю, что событие не отфильтровано или событие удалено другим виджетом. У кого-нибудь есть идеи, как подойти к этой проблеме?

1 Ответ

2 голосов
/ 30 сентября 2019

В PySide2, если объект не назначен переменной, GC удаляет его, поэтому в вашем случае вы должны сделать следующее:

obj = FilterObject() 
mainWin.installEventFilter(obj)
...