Создайте гиперссылки из URL-адресов в текстовом файле с помощью QTextBrowser

У меня есть текстовый файл с некоторым основным текстом:

For more information on this topic, go to (http://moreInfo.com)
This tool is available from (https://www.someWebsite.co.uk)
Contacts (https://www.contacts.net)

Я хотел бы, чтобы URL-адреса отображались в виде гиперссылок в QTextBrowser, так что при нажатии веб-браузер откроется и загрузит веб-сайт. Я видел это сообщение, в котором используется:

<a href="http://foo">Bar</a>

но поскольку текстовый файл может быть отредактирован кем угодно (т. е. он может включать текст, который не содержит веб-адреса), мне бы хотелось, чтобы эти адреса, если таковые имеются, можно было автоматически связывать гиперссылками перед добавлением в текстовый браузер.

Вот как я читаю текстовый файл:

def info(self):
    text_browser = self.dockwidget.text_browser
    file_path = 'path/to/text.txt'
    f = open(file_path, 'r')
    text = f.read()
    text_browser.setText(text)
    text_browser.setOpenExternalLinks(True)
    self.dockwidget.show()

Изменить:

Сделал некоторый прогресс и сумел получить гиперссылки, используя (при условии, что ссылки находятся внутри круглых скобок):

import re

def info(self):
    text_browser = self.dockwidget.text_browser
    file_path = 'path/to/text.txt'
    f = open(about_file_path, 'r')
    text = f.read()
    urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', text)

    for x in urls:
        if x in text:
            text = text.replace(x, x.replace('http', '<a href="http').replace(')', '">') + x + '</a>')

    textBrowser.setHtml(text)
    textBrowser.setOpenExternalLinks(True)
    self.dockwidget.show()

Однако все это отображается одной строкой, а не в таком формате, как в текстовом файле. Как я мог это решить?

Изображение


person Joseph    schedule 21.02.2018    source источник
comment
@ekhumoro - Спасибо за ссылку, она действительно довольно сложная! Но ваше предложение по сохранению новых строк для меня достаточно хорошо, не могли бы вы опубликовать свой комментарий в качестве ответа? :)   -  person Joseph    schedule 22.02.2018


Ответы (1)