View difference between Paste ID: Va0aWkV1 and
SHOW: | | - or go back to the newest paste.
1-
1+
# -*- coding: utf-8 -*-
2
from PyQt4 import QtCore
3
from PyQt4 import QtGui
4
from PyQt4 import QtWebKit
5
6
class ScreenShot(QtGui.QWidget):
7
    renderFinished = QtCore.pyqtSignal(QtGui.QImage)
8
    
9
    def __init__(self, *args, **kw):
10
        QtGui.QWidget.__init__(self, *args, **kw)
11
        self.web_page = QtWebKit.QWebPage()
12
        self.web_page.loadFinished.connect(self.takeScreenShot)
13
        self.main_frame = self.web_page.mainFrame()
14
        self.main_frame.setScrollBarPolicy(QtCore.Qt.Horizontal, QtCore.Qt.ScrollBarAlwaysOff)
15
        self.main_frame.setScrollBarPolicy(QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff)
16
17
18
    def render(self, target_url):
19
        self.web_page.setViewportSize(QtCore.QSize(1024, 768))
20
        self.main_frame.load(target_url)
21
22
23
    def takeScreenShot(self, status):
24
        if status:
25
            contents_size = self.main_frame.contentsSize()
26
            viewport_size = QtCore.QSize(contents_size.width() + 32,
27
                                         contents_size.height() + 32)
28
29
            self.web_page.setViewportSize(viewport_size)
30
31
            offscreen_image = QtGui.QImage(viewport_size, QtGui.QImage.Format_RGB32)
32
            painter = QtGui.QPainter(offscreen_image)
33
34
            self.main_frame.render(painter)
35
            painter.end()
36
37
            self.renderFinished.emit(offscreen_image)