Клик по ссылке делает весь текст в QTextBrowser гиперссылкой

После того как я нажимаю на ссылку, весь последующий текст, который добавляется в QTextBrowser имеет в себе ссылку.
Это можно увидеть, если нажать на кнопку gethtml.

import sys
from PyQt5.QtWidgets import *


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):
        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_())

До клика по ссылке

До клика по ссылке

После клика по ссылке:

После клика по ссылке

Я не понимаю какое свойство наделяет нетегированный текст в браузере таким свойством. Создавать тэг на каждую добавленную строчку кода не вариан


Ответы (1 шт):

Автор решения: S. Nick

Действительно странно отрабатывает и вам придется заворачивать в какой-либо в тег текст в каждом append или добавлять строки используя insertHtml, примерно так:

import sys
from PyQt5.Qt import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)
        
        self.browser = QTextBrowser(self)
        self.browser.setOpenLinks(False)
        self.browser.anchorClicked.connect(self.anchor_clicked)
        
        self.btn = QPushButton('get html print', self)
        self.btn.clicked.connect(self.gethtml)
        
        self.btn2 = QPushButton('add text', self)
        self.btn2.clicked.connect(self.addtxt)

        layout = QGridLayout(self.centralWidget)
        layout.addWidget(self.browser, 0, 0, 1, 2)
        layout.addWidget(self.btn2, 1, 0, 1, 1)
        layout.addWidget(self.btn, 1, 1, 1, 1)
        
    def gethtml(self):
        print(self.browser.toHtml())

    def addtxt(self):
        '''
        self.browser.append('sample text 1')
        self.browser.append('some text: <a href="http://link.com">textlink</a>')
        self.browser.append('sample text 2')
        '''
        
        self.browser.moveCursor(QTextCursor.End)                                        # +++
# -----------------> vvvvvvvvvv <------------>vvvv<------------------------------------------
        self.browser.insertHtml('sample text 1<br>')
        self.browser.insertHtml('some text: <a href="http://link.com">textlink</a><br>')
        self.browser.insertHtml('sample text 2<br>')

    def anchor_clicked(self, link):
        print(f'{link}') #


if __name__ == '__main__':
    app = QApplication(sys.argv)
    dlgMain = MainWindow()
    dlgMain.resize(400, 300)
    dlgMain.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка