PyQt5 TextEdit:为选中文本添加超链接并重置光标格式
解决PyQt5 TextEdit添加超链接后后续输入继承格式的问题
问题根源在于:给选中文本设置超链接格式后,光标会继承当前位置的超链接格式,导致后续输入的文本自动变成超链接样式。要实现类似Word、Google Docs的行为,需要在设置完选中文本的格式后,重置光标为默认字符格式。
以下是修改后的完整代码:
from PyQt5 import QtCore, QtGui, QtWidgets, Qt class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(320, 240) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setObjectName("verticalLayout") self.pushButton = QtWidgets.QPushButton(Form) self.pushButton.setObjectName("pushButton") self.pushButton.clicked.connect(self.SetHyperLink) self.verticalLayout.addWidget(self.pushButton) self.textEdit = QtWidgets.QTextEdit(Form) self.textEdit.setObjectName("textEdit") self.verticalLayout.addWidget(self.textEdit) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.pushButton.setText(_translate("Form", "添加超链接")) def SetHyperLink(self): cursor = self.textEdit.textCursor() # 没有选中内容时直接返回 if not cursor.hasSelection(): return # 为选中文本设置超链接格式 fmt = cursor.charFormat() fmt.setForeground(Qt.QColor("blue")) address = 'http://example.com' fmt.setAnchor(True) fmt.setAnchorHref(address) fmt.setToolTip(address) cursor.setCharFormat(fmt) # 创建默认字符格式,匹配TextEdit的默认样式 default_fmt = QtGui.QTextCharFormat() default_fmt.setFont(self.textEdit.document().defaultFont()) default_fmt.setForeground(self.textEdit.textColor()) # 重置光标格式为默认,避免后续输入继承超链接样式 cursor.setCharFormat(default_fmt) # 更新TextEdit的光标状态 self.textEdit.setTextCursor(cursor) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Form = QtWidgets.QWidget() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_())
关键修改说明:
- 增加选中判断:没有选中内容时直接返回,避免无效操作。
- 重置光标格式:创建默认的
QTextCharFormat,匹配TextEdit的默认字体、颜色等样式,然后将光标格式设置为该默认格式,确保后续输入使用正常样式。 - 更新光标状态:调用
setTextCursor将修改后的光标同步到TextEdit中,确保格式重置生效。
这样修改后,即使光标位于超链接文本末尾,后续输入的内容也会恢复为默认格式,和Word等办公软件的行为一致。
内容的提问来源于stack exchange,提问作者Aem Aem
相关产品推荐
相关产品推荐

