Python PyQt5 Весь текст в QTextBrowser становится «гиперактивным»

У меня проблема с текстом в QTextBrowser. У меня есть аналогичный код:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.textBox = QTextBrowser(centralWidget)

        self.textBox.setOpenExternalLinks(True)

        self.button = QPushButton(centralWidget)
        self.button.setText("PUSH")
        self.button.clicked.connect(self.pressed)

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.button)
        self.grid.addWidget(self.textBox)

    def pressed(self):
        id = 49309034
        url_name = "test_link"
        link = '<a href = https://stackoverflow.com/questions/{0}> {1} </a>'.format(id, url_name)
        dict = {'Key': 'Value', link: 'Test link'}
        for key, value in dict.items():
            self.textBox.append('{0}: {1}'.format(key, value))
        self.textBox.append("")


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

Итак, когда я нажимаю кнопку, я получаю: введите здесь описание изображения

Однако, если я нажму на ссылку, а затем снова нажму кнопку, весь текст станет «гиперактивным»: < img src="https://i.stack.imgur.com/AYS9A.png" alt="введите здесь описание изображения">

Я думаю, проблема в «следующей строке». Потому что я пробовал такой код, и он работает правильно:

string = ""
for key, value in dict.items():
    string += '{0}: {1}'.format(key, value) + '; '
self.textBox.append(string)

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

После того, как я щелкнул URL-адрес и нажал кнопку введите здесь описание изображения

Можете ли вы помочь мне понять это?


person salute-_-    schedule 21.11.2019    source источник
comment
Что вы имеете в виду, говоря, что весь текст становится «гиперактивным». В качестве гиперссылки отображается только «тестовая ссылка».   -  person Deepanshu    schedule 21.11.2019


Ответы (1)


Попробуйте переместить курсор перед добавлением строк в QTextBrowser. Например, вот так:

self.textBox.moveCursor(QTextCursor.Start)

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        self.textBox = QTextBrowser(centralWidget)

        self.textBox.setOpenExternalLinks(True)

        self.button = QPushButton(centralWidget)
        self.button.setText("PUSH")
        self.button.clicked.connect(self.pressed)

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.button)
        self.grid.addWidget(self.textBox)

    def pressed(self):

        self.textBox.moveCursor(QTextCursor.Start)       # <---

        id = 49309034
        url_name = "test_link"
        link = '<a href = https://stackoverflow.com/questions/{0}> {1} </a>'.format(id, url_name)
        dict = {'Key': 'Value', link: 'Test link'}
        for key, value in dict.items():
            self.textBox.append('{0}: {1}'.format(key, value))
        self.textBox.append("")


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

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

person S. Nick    schedule 21.11.2019
comment
Большое спасибо! Я так долго думал над этой проблемой. - person salute-_-; 21.11.2019
comment
более читабельно: self.textBox.moveCursor(QTextCursor.Start) - person eyllanesc; 21.11.2019