在keyPressEvent中为CTRL + A添加侦听器不再突出显示任何文本

时间:2016-07-15 22:58:13

标签: python-2.7 pyqt5

我正在为PyQt中的一个小部件编写搜索功能。我希望能够捕获CTRL + A事件,以便说明该文本中的所有匹配都已突出显示。

我所做的是覆盖keyPressEvent方法:

def keyPressEvent(self,event):
    if event.key() == (Qt.Key_Control and Qt.Key_A):
        # do something
    else:
        super(QPlainTextEdit,self).keyPressEvent(event)

这部分是因为它确实说我选择了所有我的匹配(应该是做某事部分),但它并没有突出显示我的所有文本。所以我想将我的功能与CTRL + A的默认行为结合起来,但不要干扰它,只需补充它。

编辑:我刚评论了除super(QPlainTextEdit,self).keyPressEvent(event)之外的所有内容,但它没有突出显示任何内容。这个类确实扩展了QPlainTextEdit,但现在我很好奇它还能做什么。

1 个答案:

答案 0 :(得分:1)

据我了解,如果您同时按下CTRL和A而没有QPlainTextEdit的默认行为,则需要执行某些操作。

首先,让我指出你的两个错误代码。

第一个错误是:

if event.key() == (Qt.Key_Control and Qt.Key_A):

应该是

if event.key() == Qt.Key_A and event.modifiers() == Qt.ControlModifier:

在python中,Qt.Key_Control和Qt.Key_A可以被理解为Qt.Key_A,所以当你按下没有CTRL的A时,你将进入"圆顶的东西"块。

第二个错误是:

super(QPlainTextEdit,self).keyPressEvent(event)

应该是:

super(yourEdit, self).keyPressEvent(event)

或:

QPlainTextEdit.keyPressEvent(self, event)

所以整个代码是:

def keyPressEvent(self, event):
    if event.key() == Qt.Key_A and event.modifiers() == Qt.ControlModifier:
        print "i am in do something block"
        # do something
    else:
        print "i am in the else block"
        QPlainTextEdit.keyPressEvent(self, event)

编辑:正如ekhumoro所提到的,如果您想在自定义行为之前使用QPlainTextEdit的默认行为。您可以使用以下代码。

def keyPressEvent(self, event):
    QPlainTextEdit.keyPressEvent(self, event)
    if event.key() == Qt.Key_A and event.modifiers() == Qt.ControlModifier:
        print "i am in do something block"
        # do something