组合框从pyqt主窗口窃取键盘

时间:2013-08-20 09:11:10

标签: focus pyqt mouseevent keypress mousepress

我正在写一个小的pyqt程序。我希望主窗口对箭头运动做出反应。我向我的MainGui班级keyPressEvent添加了一个处理此事件的事件。只要我不按某些按钮(例如Key_UpKey_Down),该活动就可以正常工作,这些按钮会定向到我(仅限当前)QComboBox,而不是我的mainGui。我尝试在每个mainGui之后将焦点放在paintEvent,但我需要双击按钮/ comboBox。

然后我尝试使用MousePressEvent来检查某个元素是否在鼠标下面。这与comboBox工作正常,但不适用于按钮。

那么,如何将关键事件定向到mainGui或将重点放在QButtons

1 个答案:

答案 0 :(得分: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。这将创建一些错误填充(例如,我需要在第一次响应之前按两次键盘键)但这是可行的。