qtwebengine在打印时异步执行任务,由于view和printer是本地变量,当同步功能完成时,它们将被消除。解决方案是即使在运行结束时也保留这些对象。在
不必使用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('''
... ...
''', 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)