2013-08-20 62 views
0

我在寫一個小型pyqt程序。我想讓主窗口對箭頭移動作出反應。我在我的MainGui類中添加了一個事件,keyPressEvent,處理這個事件。事件工作正常,只要我不按某些按鈕,如Key_UpKey_Down是針對我(目前唯一)QComboBox而不是我的mainGui。我試圖在每個paintEvent之後將焦點集中到mainGui,但是隨後我需要雙擊按鈕/ comboBox。組合框從pyqt主窗口中竊取鍵盤

然後我試着用MousePressEvent來檢查某個元素是否在鼠標下。這與comboBox的工作很好,但沒有與按鈕。

那麼,我該如何將重點活動指向mainGui或將焦點指向QButtons

回答

0

我用eventFilter識別,當鼠標進入QPushButton,並給它重點:

def eventFilter(self,source,event): 
    if event.type() == QtCore.QEvent.HoverMove: 
    if self.execButton.underMouse(): 
     self.execButton.setFocus() 
     self.keepFocus=False 
    else : 
     self.keepFocus=True 

keepFocus是一個標誌,我在班上的__init__函數初始化。我在paintEvent功能

if self.keepFocus: 
     self.setFocus() 
    else: 
     self.keepFocus = True 

加入這一部分現在,我把重點在MainGui,我只把它給按鈕,當鼠標霍夫了它。如果我執行另一個操作(如按下鼠標按鈕或鍵盤按鍵),則會將焦點返回到MainGui。這將創建一些錯誤填充(例如,我需要在第一個響應之前按兩次鍵盤鍵),但這是可行的。