Dan*_*gal 2 python pyqt qtextedit pyqt5
我正在使用 PyQt5 在 Python 上为客户端编写 Chat gui。我有一个 QTextEdit,客户端可以在其中写入消息。当焦点在 QTextEdit 上时,我不知道何时按下“Enter”键。
我尝试使用 installEventFilter 函数,但它检测到在除 QTextEdit 之外的所有其他小部件上按下的键。我能做些什么来解决这个问题?
def initUI(self):
# ...
self.text_box = QtWidgets.QTextEdit(self)
self.installEventFilter(self)
# ...
def keyPressEvent(self, qKeyEvent):
print(qKeyEvent.key())
if qKeyEvent.key() == Qt.Key_Return:
if self.text_box.hasFocus():
print('Enter pressed')
Run Code Online (Sandbox Code Playgroud)
当您覆盖 keyPressEvent 时,您正在侦听窗口的事件,而是将 eventFilter 安装到 QTextEdit,而不是像您在代码中所做的那样安装到窗口,并检查作为参数传递的对象是否是 QTextEdit:
def initUI(self):
# ...
self.text_box = QtWidgets.QTextEdit(self)
self.text_box.installEventFilter(self)
# ...
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.KeyPress and obj is self.text_box:
if event.key() == QtCore.Qt.Key_Return and self.text_box.hasFocus():
print('Enter pressed')
return super().eventFilter(obj, event)
Run Code Online (Sandbox Code Playgroud)