PyQt5: откройте PDF-файл, щелкнув QLabel в виде гиперссылки - PullRequest
0 голосов
/ 07 мая 2018

Я пытался создать что-то, что позволило бы мне щелкнуть Qlabel (преобразованный в гиперссылку) и открыть файл .pdf.

Я получил две следующие идеи из PYQT QLabel ссылка для открытия папки на компьютере

Идея 1

self.text_label.setText('<a href=file:///"/Documents/To%20be%20Saved/hello.pdf"> Reference Link</a>')
self.text_label.setOpenExternalLinks(True)

Идея 2

self.text_label.setText("<a href={}>Reference Link</a>".format("/Documents/To%20be%20Saved/hello.pdf"))
self.text_label.setOpenExternalLinks(True)

Кажется, ни одна из идей не открыла этот файл PDF. Я вижу созданную гиперссылку, но если я нажму на нее, она ничего не сделает.

1 Ответ

0 голосов
/ 08 мая 2018

URL должен быть закодирован:

file:///C:/Users/Shaurya/Documents/To%20be%20saved/hello.pdf

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

Для этого вы должны использовать toEncoded(), как показано ниже:

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


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QLabel()
    path = r"C:\Users\Shaurya\Documents\To be saved\hello.pdf"
    # or
    # path = QDir.home().filePath(r"Documents\To be saved\hello.pdf")
    # or
    # path = QDir(QStandardPaths.writableLocation(QStandardPaths.DocumentsLocation)).filePath(r"To be saved\hello.pdf")
    url = bytearray(QUrl.fromLocalFile(path).toEncoded()).decode() # file:///C:/Users/Shaurya/Documents/To%20be%20saved/hello.pdf
    text = "<a href={}>Reference Link> </a>".format(url)
    w.setText(text)
    w.setOpenExternalLinks(True)
    w.show()
    sys.exit(app.exec_())
...