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