2017-11-17 6 views
0

ich machen möchte die Webseite zu einem Bild außerhalb des Bildschirms, aber wenn ich folgenden Code verwenden, das Ausgangsbild leer ist, kann ich das Problem nicht lösenPyQt5 machen mit QWebEngineView

class PageShotter(QWidget): 
    def __init__(self,url,parent=None): 
     QWidget.__init__(self,parent) 
     self.url = url 
    def shot(self): 
     self.webview = QtWebEngineWidgets.QWebEngineView(self) 
     self.webview.load(QtCore.QUrl(self.url)) 
     webpage = self.webview.page() 
     self.webview.setVisible(True) 
     self.webview.loadFinished.connect(self.save) 
    def save(self,finished): 
     if finished: 
      size = self.webview.contentsRect() 
      print(u"width:%d,hight:%d" % (size.width(), size.height()))    
      img = QtGui.QImage(size.width(), size.height(), QtGui.QImage.Format_ARGB32) 
      painter = QtGui.QPainter(img)    
      self.webview.render(painter,QtCore.QPoint()) 
      painter.end() 
      filename = 'page.png' 
      if img.save(filename): 
       filepath = os.path.join(os.path.dirname(__file__), filename) 
       print(u"success:%s" % filepath) 
      else: 
       print(u"fail") 
     else: 
      print("Error") 


if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    shotter = PageShotter(web_site.base_url) 
    shotter.shot() 
    app.exec() 
+0

Überprüfen Sie meine Antwort, und wenn es funktioniert, vergessen Sie nicht, es als richtig zu markieren, wenn Sie nicht wissen, wie es zu tun, überprüfen Sie den folgenden Link: https://stackoverflow.com/tour – eyllanesc

Antwort

0

Sie müssen das ScreenCaptureEnabled Attribut aktivieren Dazu müssen Sie zuerst das Attribut PluginsEnabled aktivieren. Außerdem wird der Inhalt nach der Verwendung von show gerendert, aber da Sie das Widget nicht anzeigen möchten, aktivieren wir das Attribut WA_DontShowOnScreen.

class PageShotter(QWebEngineView): 
    def __init__(self, url, parent=None): 
     QWebEngineView.__init__(self, parent) 
     self.url = url 

     self.setAttribute(Qt.WA_DontShowOnScreen, True) 
     self.setAttribute(Qt.WA_DeleteOnClose, True) 
     self.show() 

     QWebEngineSettings.globalSettings().setAttribute(QWebEngineSettings.PluginsEnabled, True) 
     QWebEngineSettings.globalSettings().setAttribute(QWebEngineSettings.ScreenCaptureEnabled, True) 

    def shot(self): 
     self.load(QUrl(self.url)) 
     self.loadFinished.connect(self.save) 

    def save(self, finished): 
     if finished: 
      size = self.contentsRect() 
      print(u"width:%d,hight:%d" % (size.width(), size.height())) 
      img = QImage(size.width(), size.height(), QImage.Format_ARGB32) 
      painter = QPainter(img) 
      self.render(painter) 
      painter.end() 
      filename = 'page.png' 
      if img.save(filename): 
       filepath = os.path.join(os.path.dirname(__file__), filename) 
       print(u"success:%s" % filepath) 
      else: 
       print(u"fail") 
     else: 
      print("Error") 
     self.close() 


if __name__ == '__main__': 
    import sys 

    app = QApplication(sys.argv) 
    shotter = PageShotter("https://stackoverflow.com/questions/47344947/pyqt5-render-with-qwebengineview") 
    shotter.shot() 
    app.exec() 
Verwandte Themen