pyqt QTextEdit 如何把光标始终控制在最后

网上介绍的installEventFilter和eventFilter方法不行。
def eventFilter(self,a0,a1)

if a1.type()==QEvent.MouseKeyPress:
检测不到鼠标键按下,其次在该函数里
self.textEdit.moveCursor(QTextCursor.End)
异常退出了

检测不到鼠标输入可能是被主窗口捕获了。

【以下回答由 GPT 生成】

在PyQt中,要将光标始终定位在QTextEdit控件的最后一个位置,您可以使用QTextEdit的setTextCursor方法。以下是一个解决方案的示例代码:

from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit
from PyQt5.QtGui import QTextCursor
from PyQt5.QtCore import Qt


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)

        # 设置文本框的初始文本和光标
        self.textEdit.setPlainText("Hello World!")
        self.textEdit.setTextCursor(QTextCursor(self.textEdit.document()))

        # 安装事件过滤器
        self.textEdit.installEventFilter(self)

    def eventFilter(self, obj, event):
        if obj == self.textEdit and event.type() == Qt.KeyPress:
            if event.key() in (Qt.Key_Return, Qt.Key_Enter):
                # 在回车键按下后将光标移动到文本的末尾
                cursor = self.textEdit.textCursor()
                cursor.movePosition(QTextCursor.End)
                self.textEdit.setTextCursor(cursor)
        return super().eventFilter(obj, event)


if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在以上代码中,我们首先通过调用setTextCursor方法将光标设置在文本的开头位置(即setTextCursor(QTextCursor(self.textEdit.document())))。然后,我们使用installEventFilter方法安装一个事件过滤器,将事件过滤器设置为self(MainWindow对象)。在事件过滤器中,我们检测到按下回车键时(event.key() in (Qt.Key_Return, Qt.Key_Enter)),将光标移动到文本的末尾并使用setTextCursor方法设置光标位置。

这样,每当用户在QTextEdit文本框中按下回车键时,光标都会自动移动到文本的末尾位置。

这就是如何通过pyqt的QTextEdit控件将光标始终定位在最后,并正确使用installEventFilter和eventFilter方法来检测鼠标键盘事件的方法。希望这能帮到您!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^