Всплывающие подсказки или строка состояния не работают в приложении PyQt от Maya - PullRequest
0 голосов
/ 22 июля 2011

У меня есть PyQt4 QDialog, который я запускаю с python в Autodesk Maya.Я хочу иметь строку состояния в окне или, при необходимости, всплывающие подсказки.Майя, кажется, не одобряет ни того, ни другого.Я реализовал это, используя метод, описанный здесь:

http://www.qtcentre.org/threads/10593-QDialog-StatusBar

Если я запускаю свое приложение автономно, оба работают правильно.Однако при запуске из Maya обновления статуса отправляются в общую строку состояния Maya (что не очень очевидно, если вы находитесь в другом окне), и Maya, похоже, полностью крадет у меня события: если я наблюдаю за событиями, которыемой метод event () получает, он никогда не получает событие QEvent.StatusTip.Я пытался поменять свой QDialog на QMainWindow, но, похоже, он ничего не меняет.

Есть предложения по поиску путей, чтобы заставить это работать?

Ответы [ 3 ]

0 голосов
/ 13 сентября 2012

Мне тоже нужно заняться этим, чтобы ваш пост был весьма полезным.

Когда я сталкивался с такими проблемами, как это раньше, я решил их, используя installEventFilter на всех виджетах (тот же фильтр), а не на подклассах.Затем вы можете получать и принимать события, чтобы блокировать их от Maya (или пропустить их, например, пробел для маркировки меню на вашем графическом интерфейсе и т. Д.)

Вот то, что я использую, чтобы Maya имела пробел (отмечаяменю), Ctrl + A (переключатель редактора атрибутов) и Ctrl + Z (отменить).Это будет добавлено к вашему фильтру событий:

if event.type() == QEvent.KeyPress:
    key = event.key()
    mod = event.modifiers()
    if ((ctrla and key == Qt.Key_A and mod == Qt.ControlModifier) or # CTRL+A
        (ctrlz and key == Qt.Key_Z and mod == Qt.ControlModifier) or # CTRL+Z
        (space and key == Qt.Key_Space)):                            # Space Bar
        event.ignore()
        return True

return False

Вам просто нужно сделать обратное и использовать event.accept() и return False

0 голосов
/ 23 августа 2016

Для QWidgets, ответ Колтс здесь довольно хорошо.

Вот так у меня получилось работать для QActions:

class ActionFn(object):
    def __init__(self, action):
        self.action = action
    def __call__(self):
        self.action.parent()._displayStatusTip(self.action.statusTip())

Затем после создания действия:

newAction._statusFn = _StatusTipActionFn(newAction)
newAction.hovered.connect(newAction._statusFn)

Надеюсь, это поможет.

0 голосов
/ 04 августа 2011

В данный момент я работаю над этим ужасным образом: создаю подклассы для каждого из виджетов, которые я хочу использовать, и добавляю сигнал для отправки родителю self.setMouseTracking(True) и mouseMoveEvent(self, e), который отправляет сигналк родителю.Затем в верхней части дерева я установил строку состояния.Это своего рода неприятный код, который заставляет меня чувствовать себя грязным, подклассифицировать все типы виджетов, но, похоже, он работает.Любые лучшие предложения ОЧЕНЬ с благодарностью приняты!

...