[英]How to highlight a word from the text in qtextedit in pyqt5 python?
我正在 pyqt5 python 中创建一个文本编辑器。 我想像任何其他文本/代码编辑器一样添加查找功能。 在查找行编辑中输入一个或多个单词后; 该词将在 TextEdit 中突出显示! 如何在 pyqt5 python 中做到这一点 [不在 pyqt4 或任何其他编程语言中] 我的代码:
class Ui_nms_pad(QMainWindow):
def __init__(self):
super(Ui_nms_pad, self).__init__()
uic.loadUi('Nms_pad.ui', self)
self.Find_Button.clicked.connect(self.Find_word())
def Find_word(self):
words = self.Find_lineEdit.text
{highlight words in text edit}
我希望下面的代码能达到你的目的。
def Find_word(self):
self.findDialog = QtWidgets.QDialog(self)
label = QtWidgets.QLabel("Find Word:")
self.lineEdit = QtWidgets.QLineEdit()
self.lineEdit.setText(self.lastSearchText)
label.setBuddy(self.lineEdit)
self.findButton = QtWidgets.QPushButton("Find Next")
self.findButton.setDefault(True)
self.findButton.clicked.connect(self.searchText)
buttonBox = QtWidgets.QDialogButtonBox(QtCore.Qt.Vertical)
buttonBox.addButton(self.findButton, QtWidgets.QDialogButtonBox.ActionRole)
topLeftLayout = QtWidgets.QHBoxLayout()
topLeftLayout.addWidget(label)
topLeftLayout.addWidget(self.lineEdit)
leftLayout = QtWidgets.QVBoxLayout()
leftLayout.addLayout(topLeftLayout)
mainLayout = QtWidgets.QGridLayout()
mainLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
mainLayout.addLayout(leftLayout, 0, 0)
mainLayout.addWidget(buttonBox, 0, 1)
mainLayout.setRowStretch(2, 1)
self.findDialog.setLayout(mainLayout)
self.findDialog.setWindowTitle("Find")
self.findDialog.show()
def searchText(self):
cursor = self.text.textCursor()
findIndex = cursor.anchor()
text = self.lineEdit.text()
content = self.text.toPlainText()
length = len(text)
self.lastSearchText = text
index = content.find(text, findIndex)
if -1 == index:
errorDialog = QtWidgets.QMessageBox(self)
errorDialog.addButton("Cancel", QtWidgets.QMessageBox.ActionRole)
errorDialog.setWindowTitle("Find")
errorDialog.setText("Not Found\"%s\"." % text)
errorDialog.setIcon(QtWidgets.QMessageBox.Critical)
errorDialog.exec_()
else:
start = index
cursor = self.text.textCursor()
cursor.clearSelection()
cursor.movePosition(QtGui.QTextCursor.Start, QtGui.QTextCursor.MoveAnchor)
cursor.movePosition(QtGui.QTextCursor.Right, QtGui.QTextCursor.MoveAnchor, start + length)
cursor.movePosition(QtGui.QTextCursor.Left, QtGui.QTextCursor.KeepAnchor, length)
cursor.selectedText()
self.text.setTextCursor(cursor)
QTextEdit 具有find()
功能,它会自动突出显示文本匹配的第一次出现,并在找到文本时返回一个布尔值。
没有任何参数,除了搜索字符串之外,搜索是从当前文本光标位置开始到文档末尾进行的。 在以下示例中,如果未找到匹配项,则通过将光标移动到文档的开头来“包装”搜索; 这显然仅用于演示目的(如果这是首选的搜索模式,您可以在开始搜索之前首先移动光标)。
def find_word(self):
words = self.find_lineEdit.text()
if not self.textEdit.find(words):
# no match found, move the cursor to the beginning of the
# document and start the search once again
cursor = self.textEdit.textCursor()
cursor.setPosition(0)
self.textEdit.setTextCursor(cursor)
self.textEdit.find(words)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.