繁体   English   中英

pyqt5 转到行 Qtextedit

[英]pyqt5 goto line Qtextedit

我一直在网上寻找很多如何在 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_())

问题在于,如果行号小于文本中的行数,则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_())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM