2011-07-22 38 views
0

我有一個PyQt4 QDialog,我從Autodesk Maya的python啓動。我想在窗口中有一個狀態欄,或者,如果需要的話,工具提示。瑪雅人似乎也不贊成。正確工具提示或狀態欄無法在Maya的PyQt應用程序中工作

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

如果我啓動我的應用程序獨立,無論工作:我一直在使用這裏所描述的方法來實現它。不過,從Maya運行狀態更新會發送到一般的Maya狀態欄(如果您處於不同的窗口中,這並不明顯),Maya似乎完全從我那裏竊取了事件:如果我監視事件我的事件()方法越來越,它永遠不會得到一個QEvent.StatusTip事件。我已經嘗試將QDialog替換爲QMainWindow,但它似乎沒有改變任何東西。

任何建議爲了讓這項工作正常工作?

回答

0

目前,我正在以一種可怕的方式解決這個問題:子類化我想使用的每個小部件,並添加一個信號發送給父代self.setMouseTracking(True)和一個mouseMoveEvent(self, e),它將信號發送給父代。然後在樹的頂部我設置狀態欄。這是一種令人討厭的代碼,它使我感到骯髒,繼承所有類型的窗口小部件,但它確實有效。 更好的建議非常感謝!

+0

應該撤消這個接受的答案。這不是一個好的解決方案。 – Rafe

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

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) 

我希望這有助於。

相關問題