当用户单击帮助图标时,我想显示一个本地html文件。如下所示的方法已连接到来自图标的$(function() {
var adim;
$('#points').on('input', function() {
var element = $('#points'),
deger = element.val()
// Set rules here
if (deger < 20) {
adim = 1;
} else if (deger == 20) {
adim = adim === 2 ? 1 : 2;
} else if (deger == 50) {
adim = adim == 5 ? 2 : 5;
} else if (deger == 100) {
adim = adim == 10 ? 5 : 10;
} else if (deger == 200) {
adim = adim == 50 ? 10 : 50;
}
element.attr('step', adim);
element.attr('min', adim);
$('#deger').text(deger);
$('#adim').text(adim);
});
});
信号。在下面显示的方法中,未在默认浏览器中打开html文件,并且未激活脚本的triggered
部分。我有两个问题:
使用PyQt5显示本地html文件的最佳方法是什么?
当找不到html文件时如何使脚本引发异常?
except
答案 0 :(得分:0)
为什么不显示HTML?
路径以:
开头,表示您正在使用qresource,首先要做的是使用以下命令将.rc转换为.py:
pyrcc your_resource.qrc -o your_resource_rc.py
在我的情况下,我的qresource是resource.qrc生成的resource_rc.py文件,因此必须将其导入.py。
qresource路径是虚拟的,它们不存在于硬盘中,因此当要使用该文件时,浏览器将找不到它,因此解决方案是将其转换为本地文件,我们可以使用QFile保存它但是此文件必须是临时文件,因此最好使用QTemporaryFile保存。
在您的情况下,代码应如下:
from PyQt5 import QtCore, QtGui, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
lay = QtWidgets.QVBoxLayout(self)
button = QtWidgets.QPushButton("Help")
button.clicked.connect(self.helpScreen)
lay.addWidget(button)
def helpScreen(self):
resource_path = ":/plugins/geomAttribute/help/index_en.html"
resource_file = QtCore.QFile(resource_path)
if resource_file.open(QtCore.QIODevice.ReadOnly):
tmp_file = QtCore.QTemporaryFile(self)
tmp_file.setFileTemplate("XXXXXX.html")
if tmp_file.open():
tmp_file.write(resource_file.readAll())
resource_file.close()
tmp_file.flush()
url = QtCore.QUrl.fromLocalFile(tmp_file.fileName())
if QtGui.QDesktopServices.openUrl(url):
return
QtWidgets.QMessageBox.warning(None, 'Warning', 'Unable to locate help file')
import resource_rc
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
1。用PyQt5显示本地html文件的最佳方法是什么?
有几种显示HTML的方法,最好的选择取决于您,例如,有以下几种方法:
QDesktopServices::openUrl()
QLabel
QTextEdit
,QPlainTextEdit
等QWebEngineView
,QWebView
等2。找不到html文件时如何使脚本引发异常?
出于效率原因,Qt不会抛出异常,因此在直接依赖于Qt的代码部分中,请不要使用try-except,如果任务是同步的,则Qt有2种主要机制来通知您这是错误的如果QDesktopServices::openUrl()
是同步任务,则该函数将返回一个布尔值,该布尔值指示任务是否正确完成,如果错误是异步给出的,则将发出一个指示该任务的信号,因此它将返回一个布尔值,指示如果任务执行成功:
布尔QDesktopServices :: openUrl(const QUrl&url)
在相应的Web浏览器中为用户的 桌面环境,如果成功,则返回true;否则返回 错误。
[...]