我有一个简单的表单,包含一些组合,标签,按钮和QTextEdit。
我尝试用keyPressEvent捕获enter或return键,但由于某种原因我无法做到。 然而,我也使用的ESC键被识别。
这是一段代码:
def keyPressEvent(self, e):
print e.key()
if e.key() == QtCore.Qt.Key_Return:
self.created.setText('return')
if e.key() == QtCore.Qt.Key_Enter:
self.created.setText('enter')
if e.key() == QtCore.Qt.Key_Escape:
self.cmbEdit = not(self.cmbEdit)
if self.cmbEdit:
等...
我错过了什么吗?
答案 0 :(得分:7)
您的代码并不完全清楚,但看起来您可能已为表单重新实现keyPressEvent
,当您需要为文本编辑本身执行此操作时。
解决这个问题的一种方法是使用event filter,它有时可以更灵活,因为它可以避免对您感兴趣的小部件进行子类化。下面的演示脚本显示了基础知识如何使用它。需要注意的重要一点是,事件过滤器应返回True
以停止任何进一步处理,返回False
以传递事件以进行进一步处理,或者只是直接进入基类事件过滤器。
from PySide import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.edit = QtGui.QTextEdit(self)
self.edit.installEventFilter(self)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.edit)
def eventFilter(self, widget, event):
if (event.type() == QtCore.QEvent.KeyPress and
widget is self.edit):
key = event.key()
if key == QtCore.Qt.Key_Escape:
print('escape')
else:
if key == QtCore.Qt.Key_Return:
self.edit.setText('return')
elif key == QtCore.Qt.Key_Enter:
self.edit.setText('enter')
return True
return QtGui.QWidget.eventFilter(self, widget, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 300, 300)
window.show()
sys.exit(app.exec_())