0

Autodesk Maya の Python から起動する PyQt4 QDialog があります。ウィンドウにステータス バーを表示したい、または必要に応じてツールチップを表示したい。マヤはどちらも認めていないようだ。ここで説明する方法を使用して実装しました。

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

アプリをスタンドアロンで起動すると、両方とも正しく動作します。ただし、Maya から実行すると、ステータスの更新が一般的な Maya ステータス バーに送信され (別のウィンドウにいる場合はあまりわかりません)、Maya は私からイベントを完全に盗んでいるように見えます:私の event() メソッドは取得していますが、QEvent.StatusTip イベントを取得することはありません。QDialog を QMainWindow に交換しようとしましたが、何も変わらないようです。

これを機能させるために見下ろす道について何か提案はありますか?

4

3 に答える 3

0

現在、私はこれを恐ろしい方法で回避しています。使用する各ウィジェットをサブクラス化し、親に送信するシグナルを追加し、親にシグナルを送信しself.setMouseTracking(True)ますmouseMoveEvent(self, e)。次に、ツリーの一番上にステータスバーを設定します。これは、すべてのウィジェットタイプをサブクラス化して、私を汚く感じさせる一種の厄介なコードですが、機能しているようです。より良い提案は非常にありがたく受けました!

于 2011-08-04T08:35:10.027 に答える
0

QWidgets の場合、colts answer hereはかなり良いです。

これは、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)

これが役立つことを願っています。

于 2016-08-23T18:52:23.767 に答える
0

私もこれに取り組む必要があるので、あなたの投稿は非常に役に立ちました。

以前にこのようなイベントの問題に遭遇したとき、サブクラス化するのではなく、すべてのウィジェット (同じフィルター) で installEventFilter を使用して解決しました。次に、イベントを受け取って受け入れて、Maya からブロックすることができます (または、GUI 上のメニューをマークするためのスペース バーなどを通過させます)。

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

于 2012-09-13T00:54:17.363 に答える