Как убедиться, что QWebEngineView полностью отрисован, прежде чем делать снимок экрана? - PullRequest
4 голосов
/ 22 мая 2019

Я хочу сделать снимок экрана QWebEngineView для страницы с большим изображением. При запуске кода ниже красный фон отображается правильно, а изображение - нет.

Как я могу убедиться, что страница полностью отрисована, прежде чем делать снимок экрана?

from PySide2 import QtCore, QtWidgets, QtWebEngineWidgets

html = """
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <style>
  img { max-width:100%; max-height:100%; }
  div { height: 270px; width: 540px; }
  body { margin: 0; background-color: red; }
  </style>
</head>
<body>
<div>
  <img src="https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73751/world.topo.bathy.200407.3x5400x2700.png">
</div>
</body>
</html>
"""

class Capture(QtWebEngineWidgets.QWebEngineView):
  def __init__(self, parent=None):
    super(Capture, self).__init__(parent)

    self.loadFinished.connect(self.save)
    self.show()
    self.resize(540, 270+5)

  @QtCore.Slot(bool)
  def save(self, isOk):
    if not isOk:
      print('Error')
      return

    self.grab().save('page.png', b'PNG')

if __name__ == '__main__':
  app = QtWidgets.QApplication()
  capture = Capture()
  capture.setHtml(html)
  app.exec_()

EDIT:

Эквивалентный фрагмент кода в C ++: https://pastebin.com/cH7ZgFDB

РЕДАКТИРОВАТЬ 2:

Я открыл тикет в системе отслеживания ошибок Qt.

...