2011-07-22 18 views
0

Autodesk MayaでPythonからPyQt4 QDialogを起動しました。ウィンドウ内にステータスバーを表示したい場合や、必要に応じてツールチップを表示したいマヤはどちらのことも認めていないようです。私はここで説明する方法を使用してそれを実装しました:ツールチップまたはステータスバーがMayaのPyQtアプリケーションで動作しない

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

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

この機能を利用するにあたっては、どのような方法をお勧めしますか?

答えて

0

私は使用したいウィジェットのそれぞれをサブクラス化し、親に送信する信号を追加すると、self.setMouseTracking(True)mouseMoveEvent(self, e)が親に信号を送信するという恐ろしい方法でこれを回避しています。その後、私はステータスバーを設定します。これは、すべてのウィジェットタイプをサブクラス化する、汚い気分にさせる厄介なコードですが、動作しているようです。 より良い提案非常に感謝して受け取りました!

+0

これを受け入れられた回答として取り消す必要があります。これは良い解決策ではありません。 – Rafe

0

私はこれにも対処する必要があるので、あなたの投稿は非常に役に立ちました。

このようなイベントの問題が発生したときは、サブクラス化ではなく、すべてのウィジェット(同じフィルタ)でinstallEventFilterを使用して解決しました。次に、あなたはMayaからそれらをブロックするためのイベントを受け取り、受け入れることができます(例えば、あなたのgui上のメニューをマーキングするためのスペースバーなど)

ここで私はMayaにスペースバー(マーキングメニュー) 、ctrl + A(属性エディタトグル)、ctrl + Z(元に戻す)。これはあなたのイベントフィルタに追加されます:あなたはちょうど反対のことを行うと、QWidgetsについてはevent.accept()return False

0

使用する必要があります

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 

colts answer hereはかなり良いです。

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

次にアクションが作成された後:

これは、私はそれがQActionsのために働いて得た方法である

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

私はこのことができます願っています。

関連する問題