Откройте .pdf, щелкнув QLabel, сделанный как гиперссылка


person Shaurya Garg    schedule 07.05.2018    source источник
comment
Две строки кода в примере ссылаются на разные объекты меток. Было ли это случайно, когда вы писали свой вопрос о SO, или вы действительно обращаетесь к неправильной метке в одной из строк кода?   -  person three_pineapples    schedule 07.05.2018
comment
Спасибо за редактирование. То есть случайно. Я исправлю это как можно скорее.   -  person Shaurya Garg    schedule 07.05.2018
comment
@eyllanesc Привет! это C:\Users\Shaurya\Documents\Сохранить\hello.pdf. Но разве путь не имеет большого отношения к этой проблеме?   -  person Shaurya Garg    schedule 08.05.2018


Ответы (1)


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_())
person eyllanesc    schedule 07.05.2018
comment
Работает отлично. Большое спасибо @eyllanesc. - person Shaurya Garg; 10.05.2018