Отобразить файл html в окне PyQt5 (подойдет и файл pdf, если проще)
Есть инструкция в формате файла .html и .pdf, нудно вывести в отдельное окно в программе содержимое любого из этих файлов, чтобы пользователь при вызове инструкции мог её прочитать.
В инструкции есть текст, таблицы и картинки.
То что я написал, выводит чистое окно, подскажите пожалуйста как это можно реализовать.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWebEngineWidgets import QWebEngineView
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(1019, 593)
self.webView = QWebEngineView(parent=Form)
self.webView.setGeometry(QtCore.QRect(0, 30, 1021, 561))
self.webView.setObjectName("webView")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle("ИНСТРУКЦИЯ")
with open("///home/dev7/PycharmProjects/po-uvt/index.html", 'r') as f:
html = f.read()
self.webView.setHtml(html)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec())
index.html:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello PyQt5</h1>
<h2>Hello PyQt5</h2>
<h3>hello PyQt5</h3>
<h4>hello PyQt5</h4>
<h5>hello PyQt5</h5>
<h6>Hello PyQt5</h6>
</body>
</html>
Ответы (1 шт):
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
void QWebEngineView::load(const QUrl &url)
Загружает указанный URL-адрес и отображает его.
QUrl QUrl::fromLocalFile(const QString &localFile)
Возвращает QUrl-представление localFile, интерпретируемое как локальный файл. Эта функция принимает пути, разделенные косой чертой, а также собственный разделитель для этой платформы.
main.py
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWebEngineWidgets import QWebEngineView
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(1019, 593)
self.webView = QWebEngineView(parent=Form)
self.webView.setGeometry(QtCore.QRect(0, 30, 1021, 561))
self.webView.setObjectName("webView")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle("ИНСТРУКЦИЯ")
'''
with open("///home/dev7/PycharmProjects/po-uvt/index.html", 'r') as f:
html = f.read()
self.webView.setHtml(html)
'''
class Window(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent = None):
super().__init__(parent)
self.setupUi(self)
file = "D:/_Qt/__Qt/q1502557_index.html" # !!! +++
self.webView.load(QtCore.QUrl.fromLocalFile(file)) # !!! +++
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Window()
w.show()
'''
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
'''
sys.exit(app.exec())
q1502557_index.html
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello PyQt5</h1>
<h2>Hello PyQt5</h2>
<h3>hello PyQt5</h3>
<h4>hello PyQt5</h4>
<h5>hello PyQt5</h5>
<h6>Hello PyQt5</h6>
<p style="margin-top:12px; margin-bottom:12px;
margin-left:0px; margin-right:0px; -qt-block-indent:0;
text-indent:0px;">
<img src="D:/_Qt/img/cat.jpg" />
</p>
<table cellspacing="2" border="1" cellpadding="5" width="600">
<tbody>
<tr><th>1</th><th>2</th><th>3</th><th>4</th></tr>
<tr><td>item 0_0</td><td>item 0_1</td><td>item 0_2</td><td>item 0_3</td></tr>
<tr><td>item 1_0</td><td>item 1_1</td><td>item 1_2</td><td>item 1_3</td></tr>
<tr><td>item 2_0</td><td>item 2_1</td><td>item 2_2</td><td>item 2_3</td></tr>
<tr><td>item 3_0</td><td>item 3_1</td><td>item 3_2</td><td>item 3_3</td></tr>
</tbody>
</table>
</body>
</html>
