使用 QTextBrowser 从文本文件中的 url 创建超链接
Create hyperlinks from urls in text file using 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, so that when clicked, the web browser will open and load the website. I have seen this post 中显示为超链接,它使用:
<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()
但是,它们都出现在一行中,并且与文本文件中的格式不同。我该如何解决这个问题?
正确匹配 url 比您当前的解决方案可能建议的要复杂。有关问题的完整细分,请参阅:检查字符串是否有效的最佳正则表达式是什么 URL?
.
另一个问题更容易解决。要保留换行符,您可以使用:
text = '<br>'.join(text.splitlines())
我有一个包含一些基本文本的文本文件:
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, so that when clicked, the web browser will open and load the website. I have seen this post 中显示为超链接,它使用:
<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()
但是,它们都出现在一行中,并且与文本文件中的格式不同。我该如何解决这个问题?
正确匹配 url 比您当前的解决方案可能建议的要复杂。有关问题的完整细分,请参阅:检查字符串是否有效的最佳正则表达式是什么 URL? .
另一个问题更容易解决。要保留换行符,您可以使用:
text = '<br>'.join(text.splitlines())