我正在为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
,但现在我很好奇它还能做什么。
答案 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