2017-11-17 17 views
0

でレンダリング、私は次のコードを使用する場合ただし、出力画像がブランクで、私は問題PyQt5私は画像オフスクリーンにWebページをレンダリングしたい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

私の答えをチェックし、それが働いていた場合、正しいとしてマークすることを忘れないでください、あなたはどのように行うのか分からない場合は、次のリンクをチェック:https://stackoverflow.com/tourを – eyllanesc

答えて

0

あなたはScreenCaptureEnabled属性を有効にする必要がありますこのためには、最初にPluginsEnabled属性を有効にする必要があります。さらに、コンテンツはshowを使用してレンダリングされますが、ウィジェットを表示したくない場合は、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() 
関連する問題