Qt Webengine выполняет задачи асинхронно, как печать, и, поскольку представление и принтер являются локальными переменными, они будут удалены после завершения функции синхронизации.Решение состоит в том, чтобы сохранить эти объекты даже после завершения работы.
Нет необходимости использовать QWebEngineView, поскольку вы ничего не будете показывать, просто QWebEnginePage.
С другой стороны, документы утверждают, что внешние ресурсы, такие как изображения, загружаются на основе URL-адреса, которому передается второй параметр.Таким образом, решение состоит в том, чтобы передать URL, используя текущий каталог в качестве основы.
import os
# ...
def run(self):
current_dir = os.path.dirname(os.path.abspath(__file__))
self._page = QtWebEngineWidgets.QWebEnginePage()
self._page.setHtml('''
... <img src="header.jpeg" alt="logo" width="280" height="100"> ...
''', QtCore.QUrl.fromLocalFile(os.path.join(current_dir, "index.html")))
self._printer = QtPrintSupport.QPrinter()
self._printer.setPaperSize(QtCore.QSizeF(80 ,297), QtPrintSupport.QPrinter.Millimeter)
r = QtPrintSupport.QPrintDialog(self._printer)
if r.exec_() == QtPrintSupport.QPrintDialog.Accepted:
self._page.print(self._printer, self.print_completed)