Pyqt 超链接不启动外部应用程序
Pyqt hyperlink not launching external application
所以我有一个 QTextEdit,我把一些 html hyperlink 放到其中的本地文件中,如下所示:
<a href="file:\path\to\myfile">link</a>
当我启动我的应用程序时,Qt 将我的 link 显示为蓝色,但它没有显示小手,我无法点击它。
在你向我扔石头之前:
- 当然我检查过我的文件确实存在
- 我尝试改用 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
- 我尝试在我的 hyperlink 中添加
type="image"
和 target="_blank"
,结果相同
我想指出它在 http links
上的效果并没有更好
编辑:
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_())
如果将 url 设置为 html 文档,您的示例将正常工作。但是如果你把它设置为一个图像文件,它就不会工作,因为同样的原因,如果你试图在 text-editor 中打开一个图像文件,它就不会工作。 QTextEdit
和 QTextBrowser
类 可以处理纯文本,加上 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>')
所以我有一个 QTextEdit,我把一些 html hyperlink 放到其中的本地文件中,如下所示:
<a href="file:\path\to\myfile">link</a>
当我启动我的应用程序时,Qt 将我的 link 显示为蓝色,但它没有显示小手,我无法点击它。
在你向我扔石头之前:
- 当然我检查过我的文件确实存在
- 我尝试改用 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 - 我尝试在我的 hyperlink 中添加
type="image"
和target="_blank"
,结果相同
我想指出它在 http links
上的效果并没有更好编辑: 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_())
如果将 url 设置为 html 文档,您的示例将正常工作。但是如果你把它设置为一个图像文件,它就不会工作,因为同样的原因,如果你试图在 text-editor 中打开一个图像文件,它就不会工作。 QTextEdit
和 QTextBrowser
类 可以处理纯文本,加上 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>')