Pyqt超链接未启动外部应用程序

时间:2017-01-12 15:41:39

标签: python qt hyperlink pyqt qtextedit

所以我有一个QTextEdit,我把一些html超链接放到它的本地文件中:

<a href="file:\\path\\to\\myfile">link</a>

当我启动我的应用程序时,Qt将我的链接显示为蓝色,但它没有显示小手,我无法点击它。

在向我扔石头之前:

  • 我检查过我的文件当然存在
  • 我尝试使用QTextBrowser,手显示但是当我点击它时,我的游标旋转了很长时间,应用程序最终在我的QTextBrowser中打开文件二进制文件
  • 我设置了交互标记self.workflow_log_textedit.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByKeyboard|QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextBrowserInteraction|QtCore.Qt.TextEditable|QtCore.Qt.TextEditorInteraction|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
  • 我尝试在“file”和类似<a href="file:///\\path\\to\\myfile">link</a>的路径之间放置3个斜杠,这只是在我点击它时清除我的QTextBrowser
  • 我尝试在我的超链接中添加type="image"target="_blank",结果相同

我想指出,使用http链接

效果不佳

编辑: MCVE按要求:

#!/usr/bin/python

from PyQt4 import QtGui, QtCore

import sys

class MyMainWindow(QtGui.QMainWindow):

    def __init__(self, parent=None):

        super(MyMainWindow, self).__init__(parent)
        self.tb = QtGui.QTextBrowser()
        self.tb.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByKeyboard|QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextBrowserInteraction|QtCore.Qt.TextEditable|QtCore.Qt.TextEditorInteraction|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
        self.tb.setHtml('<a target="_blank" href="file:///{path}">{path}</a>'.format(path='C:\Users\johndoe\Pictures\doge.png'))
        self.setCentralWidget(self.tb) 

app = QtGui.QApplication([])
foo = MyMainWindow()
foo.show()
sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

如果将url设置为html文档,那么您的示例将正常工作。但是,如果将其设置为图像文件,它将无法工作,原因与您尝试在文本编辑器中打开图像文件时相同。 QTextEditQTextBrowser类可以处理纯文本,加上limited subset of HTML4 - 以及所有类。

当然,您可以使用<img>标记在html文档中显示图像。所以类似下面的内容应该有效:

self.tb.setHtml('<img src="image.png" />')

用于图像超链接:

self.tb.setHtml('<a href="doc.html"><img src="image.png" /></a>')