0

我正在编写一个小型 pyqt 程序。我希望主窗口对箭头移动做出反应。我在我的MainGui班级中添加了一个事件来keyPressEvent处理这个问题。只要我不按某些按钮(例如Key_UpKey_Down指向我的(目前仅)QComboBox而不是我的mainGui. 我试图把焦点放在mainGui每个之后,paintEvent但我需要双击按钮/组合框。

然后我尝试使用MousePressEvent来检查某个元素是否在鼠标下方。这适用于组合框,但不适用于按钮。

那么,我怎样才能将关键事件定向到mainGui或将焦点转移到QButtons

4

1 回答 1

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. 这会产生一些错误填充(例如,我需要在第一次响应之前按两次键盘键)但这是可行的。

于 2013-08-20T20:19:18.163 回答