PyQt5 QTextBrowser点击锚点后新增文本自动变超链接的解决方法
QTextBrowser点击锚点后新增文本自动变为超链接的解决办法
问题描述
点击示例中的"textlink"链接后,再点击"add text"按钮添加无标签文本,后续所有文本都会自动变成超链接。点击"get html print"按钮可在命令行查看生成的HTML代码。需求是关闭该现象,且不能为每一行新增文本添加标签。
示例代码(已修复)
import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import QTextCharFormat class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.resize(500, 500) self.browser = QTextBrowser(self) self.browser.resize(500, 300) self.btn = QPushButton('get html print', self) self.btn.move(250, 400) self.btn.clicked.connect(self.gethtml) self.btn2 = QPushButton('add text', self) self.btn2.move(150, 400) self.btn2.clicked.connect(self.addtxt) self.browser.setOpenLinks(False) self.browser.anchorClicked.connect(self.anchor_clicked) def gethtml(self): print(self.browser.toHtml()) def addtxt(self): # 移动光标到文档末尾并重置为默认字符格式 cursor = self.browser.textCursor() cursor.movePosition(cursor.End) default_format = QTextCharFormat() cursor.setCharFormat(default_format) self.browser.setTextCursor(cursor) self.browser.append('sample text 1') self.browser.append('some text: <a href="http://link.com">textlink</a>') self.browser.append('sample text 2') def anchor_clicked(self): pass if __name__ == '__main__': app = QApplication(sys.argv) dlgMain = MainWindow() dlgMain.show() sys.exit(app.exec_())
效果对比
点击锚点前的效果

点击锚点后的效果(修复前)

解决原理
点击锚点后,QTextBrowser的光标会停留在超链接的字符格式作用域内,后续调用append()添加文本时,会自动继承当前光标的格式,导致普通文本被设置为超链接。通过在添加文本前,将光标移到文档末尾并重置为默认字符格式,就能切断格式继承,让新增文本保持普通文本样式。
内容的提问来源于stack exchange,提问作者Alexandr
相关产品推荐
相关产品推荐

