You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:23:08