pyqt5 goto行Qtextedit

问题描述 投票:1回答:1

我一直在网络上寻找如何在QtextEdit中设置换行选项的方法,但是我没有成功。我可以在答案中看到想要的内容Move Cursor Line Position QTextEdit

但是当我想做同样的事情时,我不会得到相同的结果,也找不到解释,这是我的代码

import sys 
from PyQt5.QtWidgets import QMainWindow, QApplication,QLineEdit,QPushButton,QTextEdit
from PyQt5.QtGui import QTextCharFormat, QBrush, QColor, QTextCursor
from PyQt5.QtCore import QRegExp
class VentanaFindText(QMainWindow):
    def __init__(self):
        super(VentanaFindText, self).__init__()
        self.setWindowTitle("find text - QTextEdit")
        self.resize(475,253)
        self.line_buscar = QLineEdit(self)
        self.line_buscar.setGeometry(20,20,365,23)
        self.btn_buscar = QPushButton("buscar",self)
        self.btn_buscar.setGeometry(388,20,75,25)
        self.text_edit = QTextEdit(self)
        self.text_edit.setGeometry(20, 50, 441, 191)

        self.btn_buscar.clicked.connect(self.gotoLine)

    def gotoLine(self):     
        print("go to line")
        n = int(self.line_buscar.text())
        cursor = QTextCursor(self.text_edit.document().findBlockByLineNumber(n))
        self.text_edit.setTextCursor(cursor)    


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ventana = VentanaFindText()
    ventana.show()
    sys.exit(app.exec_())
python pyqt pyqt5 qtextedit
1个回答
2
投票

问题是,如果行号小于文本中的行数,则findBlockByLineNumber()返回有效的QTextBlock,并且在开始时QTextEdit为空,因此它将失败。一种可能的解决方案是添加结束行“ \ n”,直到获得行数为止。

import sys
from PyQt5.QtWidgets import (
    QMainWindow,
    QApplication,
    QLineEdit,
    QPushButton,
    QTextEdit,
    QGridLayout,
    QWidget,
)
from PyQt5.QtGui import QTextCursor


class VentanaFindText(QMainWindow):
    def __init__(self):
        super(VentanaFindText, self).__init__()
        self.setWindowTitle("find text - QTextEdit")
        self.resize(475, 253)
        self.line_buscar = QLineEdit()
        self.btn_buscar = QPushButton("buscar",)
        self.text_edit = QTextEdit()

        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        grid_layout = QGridLayout(central_widget)
        grid_layout.addWidget(self.line_buscar, 0, 0)
        grid_layout.addWidget(self.btn_buscar, 0, 1)
        grid_layout.addWidget(self.text_edit, 1, 0, 1, 2)

        self.btn_buscar.clicked.connect(self.gotoLine)

    def gotoLine(self):
        text = self.line_buscar.text()
        try:
            n = int(text)
        except ValueError:
            print("Cannot convert '{}' to integer number".format(text))
        else:
            if n < 1:
                print("The number must be greater than 1")
                return
            doc = self.text_edit.document()
            self.text_edit.setFocus()
            if n > doc.blockCount():
                self.text_edit.insertPlainText("\n" * (n - doc.blockCount()))
            cursor = QTextCursor(doc.findBlockByLineNumber(n - 1))
            self.text_edit.setTextCursor(cursor)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ventana = VentanaFindText()
    ventana.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.