亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pyqt5 goto line Qtextedit

pyqt5 goto line Qtextedit

慕勒3428872 2022-08-11 16:53:24
我一直在網絡上尋找很多如何在QtextEdit中制作換行選項,但是我沒有成功。我可以看到我在答案中尋找的內容 移動光標線位置 QText編輯但是當我想做同樣的事情時,我沒有得到相同的結果,我找不到解釋,這是我的代碼import sys from PyQt5.QtWidgets import QMainWindow, QApplication,QLineEdit,QPushButton,QTextEditfrom PyQt5.QtGui import QTextCharFormat, QBrush, QColor, QTextCursorfrom PyQt5.QtCore import QRegExpclass 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_())
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

問題是,如果行號小于文本中的行數,則返回一個有效的行號,并且在開始時 QTextEdit 為空,因此它將失敗。一種可能的解決方案是添加結束行“\n”,直到獲得行數。findBlockByLineNumber()QTextBlock


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_())


查看完整回答
反對 回復 2022-08-11
  • 1 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號