Вот возможный способ добиться этого. Вы можете заменить видимую текстовую часть кода HTML всей ссылкой, заменив специальные символы < > "
их HTML escape-строками < > "
. Например, текст <a href="file:file1.txt">Link</a>
становится:
<a href="file:file1.txt"><a href="file:file1.txt">Link</a></a>
Когда вы вызываете setOpenExternalLinks(True)
на QLabel, он открывает ссылки с приложением по умолчанию, используя QDesktopServices.openUrl()
. В приведенном ниже случае у меня есть файл с именем file1.txt
, и когда я нажимаю на QLabel, он открывает файл в приложении, который будет выбран, если я дважды щелкну по файлу.
import sys, re
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class LinkLabel(QLabel):
def __init__(self, text, *args, **kwargs):
super().__init__(*args, **kwargs)
visible = text.replace('<', '<').replace('>', '>').replace('"', '"')
i, j = re.search('>(.*)<', text).span()
self.setText(text[:i+1] + visible + text[j-1:])
self.setOpenExternalLinks(True)
class Template(QWidget):
def __init__(self):
super().__init__()
vbox = QVBoxLayout(self)
vbox.addWidget(LinkLabel('<a href="file:file1.txt">Link</a>'))
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = Template()
gui.show()
sys.exit(app.exec_())
Это выглядит так: