我如何知道 QTextEdit 上的 Enter 键何时被按下

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)

eyl*_*esc 6

当您覆盖 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)