コード例 #1
0
class UI(QApplication):

    def installKeyFilter(self):
        self._handler = EventHandler(self)
        UI.instance().installEventFilter(self._handler)
        #self.browser.focusProxy().installEventFilter(_handler)

    def __init__(self, argv):
        super(UI, self).__init__(argv)
        margin = 22

        self.browser = QWebEngineView()
        url = 'http://*****:*****@QtCore.pyqtSlot(str, name='takeScreenShot')
    def captureWindowImage(self,filePath):
        if(self.captureFrames):
            #print("Got signal")
            windowSize = self.browser.size()
            #print(windowSize)
            pixmap = QPixmap(windowSize)
            self.browser.render(pixmap)
            #print("Rendered Browser Window")
            pixmap.save(filePath)
            jsonPath=filePath+".json"
            jsonStr= json.dumps(self._handler.keyStatus)
            #print(jsonStr)
            localtime = time.asctime(time.localtime(time.time()))
            print("Screenshot at ", localtime)

            with open(jsonPath, "w") as jsonFile:
                jsonFile.write(jsonStr)
コード例 #2
0
class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.resize(600, 400)
        layout = QHBoxLayout(self)

        # 左侧
        widgetLeft = QWidget(self)
        layoutLeft = QVBoxLayout(widgetLeft)
        # 右侧
        self.widgetRight = QListWidget(self,
                                       minimumWidth=200,
                                       iconSize=QSize(150, 150))
        self.widgetRight.setViewMode(QListWidget.IconMode)
        layout.addWidget(widgetLeft)
        layout.addWidget(self.widgetRight)

        self.webView = QWebEngineView()
        layoutLeft.addWidget(self.webView)

        # 截图方式一
        groupBox1 = QGroupBox('截图方式一', self)
        layout1 = QVBoxLayout(groupBox1)
        layout1.addWidget(QPushButton('截图1', self, clicked=self.onScreenShot1))
        layoutLeft.addWidget(groupBox1)

        # 截图方式二(采用js)
        groupBox2 = QGroupBox('截图方式二', self)
        layout2 = QVBoxLayout(groupBox2)
        self.codeEdit = QLineEdit(
            'body',
            groupBox2,
            placeholderText='请输入需要截图的元素、ID或者class:如body、#id .class')
        layout2.addWidget(self.codeEdit)
        self.btnMethod2 = QPushButton('',
                                      self,
                                      clicked=self.onScreenShot2,
                                      enabled=False)
        layout2.addWidget(self.btnMethod2)
        layoutLeft.addWidget(groupBox2)

        # 提供访问接口
        self.channel = QWebChannel(self)
        # 把自身对象传递进去
        self.channel.registerObject('_self', self)
        # 设置交互接口
        self.webView.page().setWebChannel(self.channel)
        # 支持截图
        settings = QWebEngineSettings.globalSettings()
        settings.setAttribute(QWebEngineSettings.ScreenCaptureEnabled, True)
        self.webView.loadStarted.connect(self.onLoadStarted)
        self.webView.loadFinished.connect(self.onLoadFinished)
        self.webView.load(QUrl("https://pyqt.site"))

    def onLoadStarted(self):
        print('load started')
        self.btnMethod2.setEnabled(False)
        self.btnMethod2.setText('暂时无法使用(等待页面加载完成)')

    @pyqtSlot(bool)
    def onLoadFinished(self, finished):
        if not finished:
            return
        print('load finished')
        # 注入脚本
        page = self.webView.page()
        # 执行qwebchannel,jquery,promise,html2canvas
        page.runJavaScript(open('Data/qwebchannel.js', 'rb').read().decode())
        page.runJavaScript(open('Data/jquery.js', 'rb').read().decode())
        #         page.runJavaScript(
        #             open('Data/promise-7.0.4.min.js', 'rb').read().decode())
        page.runJavaScript(
            open('Data/html2canvas.min.js', 'rb').read().decode())
        page.runJavaScript(CreateBridge)
        print('inject js ok')
        self.btnMethod2.setText('截图2')
        self.btnMethod2.setEnabled(True)

    def onScreenShot1(self):
        # 截图方式1
        page = self.webView.page()
        oldSize = self.webView.size()
        self.webView.resize(page.contentsSize().toSize())

        def doScreenShot():
            rect = self.webView.contentsRect()
            size = rect.size()
            image = QImage(size, QImage.Format_ARGB32_Premultiplied)
            image.fill(Qt.transparent)

            painter = QPainter()
            painter.begin(image)
            painter.setRenderHint(QPainter.Antialiasing, True)
            painter.setRenderHint(QPainter.TextAntialiasing, True)
            painter.setRenderHint(QPainter.SmoothPixmapTransform, True)

            self.webView.render(painter)
            painter.end()
            self.webView.resize(oldSize)

            # 添加到左侧list中
            item = QListWidgetItem(self.widgetRight)
            image = QPixmap.fromImage(image)
            item.setIcon(QIcon(image))
            item.setData(Qt.UserRole + 1, image)

        # 先等一下再截图吧
        QTimer.singleShot(2000, doScreenShot)

    def onScreenShot2(self):
        # 截图方式2
        code = self.codeEdit.text().strip()
        if not code:
            return
        self.progressdialog = QProgressDialog(self, windowTitle='正在截图中')
        self.progressdialog.setRange(0, 0)
        self.webView.page().runJavaScript(CODE % code)
        self.progressdialog.exec_()

    @pyqtSlot(str)
    def saveImage(self, image):
        self.progressdialog.close()
        # data:image/png;base64,iVBORw0KG....
        if not image.startswith('data:image'):
            return
        data = base64.b64decode(image.split(';base64,')[1])
        image = QPixmap()
        image.loadFromData(data)
        # 添加到左侧list中
        item = QListWidgetItem(self.widgetRight)
        item.setIcon(QIcon(image))
        item.setData(Qt.UserRole + 1, image)
コード例 #3
0
class TopActor(object):
    def setupUi(self, dialog):
        dialog.setObjectName("dialog")
        dialog.resize(755, 793)
        self.closeWinBtn = QtWidgets.QPushButton(dialog)
        self.closeWinBtn.setGeometry(QtCore.QRect(580, 730, 131, 31))
        self.closeWinBtn.setObjectName("closeWinBtn")
        self.label_picture = QtWidgets.QLabel(dialog)
        self.label_picture.setGeometry(QtCore.QRect(-180, 0, 1150, 850))
        self.label_picture.setStyleSheet("image: url(:/new/back_actor.jpg);")
        self.label_picture.setText("")
        self.label_picture.setObjectName("label_picture")
        self.pushButton = QtWidgets.QPushButton(dialog)
        self.pushButton.setGeometry(QtCore.QRect(410, 120, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.label_result = QWebEngineView(self)
        self.label_result.setGeometry(QtCore.QRect(50, 200, 640, 480))
        #self.label_result.setText("")
        self.label_result.setObjectName("label_result")
        self.AddTo = QtWidgets.QPushButton(dialog)
        self.AddTo.setGeometry(QtCore.QRect(310, 730, 121, 28))
        self.AddTo.setObjectName("AddTo")
        self.label = QtWidgets.QLabel(dialog)
        self.label.setGeometry(QtCore.QRect(50, 120, 41, 31))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.spinBox = QtWidgets.QSpinBox(dialog)
        self.spinBox.setGeometry(QtCore.QRect(100, 125, 61, 22))
        self.spinBox.setMinimum(2015)
        self.spinBox.setMaximum(2020)
        self.spinBox.setObjectName("spinBox")
        self.spinBox_2 = QtWidgets.QSpinBox(dialog)
        self.spinBox_2.setGeometry(QtCore.QRect(255, 125, 46, 22))
        self.spinBox_2.setMinimum(1)
        self.spinBox_2.setMaximum(20)
        self.spinBox_2.setObjectName("spinBox_2")
        self.label_2 = QtWidgets.QLabel(dialog)
        self.label_2.setGeometry(QtCore.QRect(210, 120, 41, 31))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_picture.raise_()
        self.closeWinBtn.raise_()
        self.pushButton.raise_()
        self.label_result.raise_()
        self.AddTo.raise_()
        self.label.raise_()
        self.spinBox.raise_()
        self.spinBox_2.raise_()
        self.label_2.raise_()

        self.retranslateUi(dialog)
        self.closeWinBtn.clicked.connect(dialog.close)
        QtCore.QMetaObject.connectSlotsByName(dialog)

        self.pushButton.clicked.connect(self.on_click)
        self.AddTo.clicked.connect(self.put_into_report)

    def retranslateUi(self, dialog):
        _translate = QtCore.QCoreApplication.translate
        dialog.setWindowTitle(_translate("dialog", "劳模演员"))
        self.closeWinBtn.setText(_translate("dialog", "返回上一级"))
        self.pushButton.setText(_translate("dialog", "生成图表"))
        self.AddTo.setText(_translate("dialog", "加入到数据报表"))
        self.label.setText(_translate("dialog", "年份"))
        self.label_2.setText(_translate("dialog", "排名"))

    def on_click(self, dialog):
        Actor(self.spinBox.value(), self.spinBox_2.value())
        #pixMap = QPixmap("Top_actor.jpg").scaled(self.label_result.width(),self.label_result.height())
        #self.label_result.setPixmap(QPixmap(""))
        #self.label_result.setPixmap(pixMap)
        pwd = os.getcwd()
        url_string = os.path.abspath('./SE12_Cache/Actor.html')
        self.label_result.load(QUrl.fromLocalFile(url_string))

    def cut_image(self, dialog):
        size = self.label_result.size()
        img = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(img)
        self.label_result.render(painter)
        self.label_result.render(painter)
        img.save('./SE12_Cache/Top_actor.png')
        painter.end()

    def put_into_report(self, dialog):
        try:
            doc = Document('report.docx')
        except Exception:
            #不存在文件则新建
            self.cut_image(dialog)
            doc = Document()
            doc.save('report.docx')
            doc = Document('report.docx')
            #插入图片
            images = './SE12_Cache/Top_actor.png'  # 要插入的图片
            doc.add_paragraph('\n')  # 添加文字
            doc.add_picture(images, width=Inches(6))  # 添加图, 设置宽度
            doc.save('report.docx')  # 保存路径
            print('Add picture to report Succesfully.')
        else:
            self.cut_image(dialog)
            images = './SE12_Cache/Top_actor.png'
            doc.add_paragraph('\n')
            doc.add_picture(images, width=Inches(6))
            doc.save('report.docx')
            print('Add picture to report Succesfully.')
コード例 #4
0
class Line(object):
    def setupUi(self, dialog):
        dialog.setObjectName("dialog")
        dialog.resize(742, 750)
        #dialog.resize(1742, 1750)
        self.closeWinBtn = QtWidgets.QPushButton(dialog)
        self.closeWinBtn.setGeometry(QtCore.QRect(580, 690, 131, 31))
        self.closeWinBtn.setObjectName("closeWinBtn")
        self.label_picture = QtWidgets.QLabel(dialog)
        self.label_picture.setGeometry(QtCore.QRect(-200, 0, 1150, 850))
        self.label_picture.setStyleSheet("image: url(:/new/back_line.jpg);")
        self.label_picture.setText("")
        self.label_picture.setObjectName("label_picture")
        self.spinBox_year = QtWidgets.QSpinBox(dialog)
        self.spinBox_year.setGeometry(QtCore.QRect(110, 120, 61, 22))
        self.spinBox_year.setMinimum(2015)
        self.spinBox_year.setMaximum(2020)
        self.spinBox_year.setObjectName("spinBox_year")
        self.label_texts = QtWidgets.QLabel(dialog)
        self.label_texts.setGeometry(QtCore.QRect(60, 120, 41, 21))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_texts.setFont(font)
        self.label_texts.setObjectName("label_texts")
        self.pushButton = QtWidgets.QPushButton(dialog)
        self.pushButton.setGeometry(QtCore.QRect(460, 120, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.AddTo = QtWidgets.QPushButton(dialog)
        self.AddTo.setGeometry(QtCore.QRect(290, 690, 121, 28))
        self.AddTo.setObjectName("AddTo")
        self.spinBox_year_2 = QtWidgets.QSpinBox(dialog)
        self.spinBox_year_2.setGeometry(QtCore.QRect(230, 120, 61, 22))
        self.spinBox_year_2.setMinimum(2015)
        self.spinBox_year_2.setMaximum(2020)
        self.spinBox_year_2.setObjectName("spinBox_year_2")
        self.spinBox_year_3 = QtWidgets.QSpinBox(dialog)
        self.spinBox_year_3.setGeometry(QtCore.QRect(355, 120, 61, 22))
        self.spinBox_year_3.setMinimum(2015)
        self.spinBox_year_3.setMaximum(2020)
        self.spinBox_year_3.setObjectName("spinBox_year_3")
        self.label_texts_2 = QtWidgets.QLabel(dialog)
        self.label_texts_2.setGeometry(QtCore.QRect(190, 120, 41, 21))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_texts_2.setFont(font)
        self.label_texts_2.setObjectName("label_texts_2")
        self.label_texts_3 = QtWidgets.QLabel(dialog)
        self.label_texts_3.setGeometry(QtCore.QRect(310, 120, 41, 21))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_texts_3.setFont(font)
        self.label_texts_3.setObjectName("label_texts_3")
        #self.widget = QtWidgets.QWidget(dialog)
        self.label_result = QWebEngineView(self)
        self.label_result.setGeometry(QtCore.QRect(50, 180, 640, 480))

        self.label_result.setObjectName("widget")
        self.label_picture.raise_()
        self.closeWinBtn.raise_()
        self.spinBox_year.raise_()
        self.label_texts.raise_()
        self.pushButton.raise_()
        self.AddTo.raise_()
        self.spinBox_year_2.raise_()
        self.spinBox_year_3.raise_()
        self.label_texts_2.raise_()
        self.label_texts_3.raise_()
        self.label_result.raise_()

        self.retranslateUi(dialog)
        self.closeWinBtn.clicked.connect(dialog.close)
        QtCore.QMetaObject.connectSlotsByName(dialog)

        self.pushButton.clicked.connect(self.on_click)
        self.AddTo.clicked.connect(self.put_into_report)

    def retranslateUi(self, dialog):
        _translate = QtCore.QCoreApplication.translate
        dialog.setWindowTitle(_translate("dialog", "Dialog"))
        self.closeWinBtn.setText(_translate("dialog", "返回上一级"))
        self.label_texts.setText(_translate("dialog", "年份"))
        self.pushButton.setText(_translate("dialog", "生成图表"))
        self.AddTo.setText(_translate("dialog", "加入到数据报表"))
        self.label_texts_2.setText(_translate("dialog", "年份"))
        self.label_texts_3.setText(_translate("dialog", "年份"))
		
    def on_click(self,dialog):
        line(self.spinBox_year.value(), self.spinBox_year_2.value(),self.spinBox_year_3.value())
        pwd = os.getcwd()
        url_string=os.path.abspath('./SE12_Cache/Line.html')

        self.label_result.load(QUrl.fromLocalFile(url_string))

    def cut_image(self, dialog):
        size = self.label_result.size()
        img = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(img)
        self.label_result.render(painter)
        self.label_result.render(painter)
        img.save('./SE12_Cache/Line.png')
        painter.end()

    def put_into_report(self,dialog):
        try:
            doc = Document('report.docx')
        except Exception:
            #不存在文件则新建
            self.cut_image(dialog)
            doc = Document()
            doc.save('report.docx')
            doc = Document('report.docx')
            #插入图片
            images = './SE12_Cache/Line.png'    # 要插入的图片
            doc.add_paragraph('\n')   # 添加文字
            doc.add_picture(images, width = Inches(6))  # 添加图, 设置宽度
            doc.save('report.docx')     # 保存路径
            print('Add picture to report Succesfully.')
        else:
            self.cut_image(dialog)
            images = './SE12_Cache/Line.png'
            doc.add_paragraph('\n')
            doc.add_picture(images, width = Inches(6))
            doc.save('report.docx')
            print('Add picture to report Succesfully.')
コード例 #5
0
class Big(object):
    def setupUi(self, dialog):
        dialog.setObjectName("dialog")
        dialog.resize(1330, 850)
        self.closeWinBtn = QtWidgets.QPushButton(dialog)
        self.closeWinBtn.setGeometry(QtCore.QRect(1160, 780, 131, 31))
        self.closeWinBtn.setObjectName("closeWinBtn")
        self.spinBox_season = QtWidgets.QSpinBox(dialog)
        self.spinBox_season.setGeometry(QtCore.QRect(640, 60, 46, 22))
        self.spinBox_season.setMinimum(1)
        self.spinBox_season.setMaximum(4)
        self.spinBox_season.setObjectName("spinBox_season")
        self.label_picture = QtWidgets.QLabel(dialog)
        self.label_picture.setGeometry(QtCore.QRect(-50, -110, 1541, 1071))
        self.label_picture.setStyleSheet("image: url(:/new/back_big.jpg);")
        self.label_picture.setText("")
        self.label_picture.setObjectName("label_picture")
        self.spinBox_year = QtWidgets.QSpinBox(dialog)
        self.spinBox_year.setGeometry(QtCore.QRect(530, 60, 61, 22))
        self.spinBox_year.setMinimum(2015)
        self.spinBox_year.setMaximum(2020)
        self.spinBox_year.setObjectName("spinBox_year")
        self.label_texts = QtWidgets.QLabel(dialog)
        self.label_texts.setGeometry(QtCore.QRect(440, 60, 81, 21))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_texts.setFont(font)
        self.label_texts.setObjectName("label_texts")
        self.pushButton = QtWidgets.QPushButton(dialog)
        self.pushButton.setGeometry(QtCore.QRect(780, 60, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.label_result1 = QWebEngineView(self)
        self.label_result1.setGeometry(QtCore.QRect(10, 150, 640, 480))
        #self.label_result1.setText("")
        self.label_result1.setObjectName("label_result1")
        self.AddTo = QtWidgets.QPushButton(dialog)
        self.AddTo.setGeometry(QtCore.QRect(260, 700, 121, 28))
        self.AddTo.setObjectName("AddTo")
        self.label_result2 = QWebEngineView(self)
        self.label_result2.setGeometry(QtCore.QRect(680, 150, 640, 480))
        #self.label_result2.setText("")
        self.label_result2.setObjectName("label_result2")
        self.AddTo_2 = QtWidgets.QPushButton(dialog)
        self.AddTo_2.setGeometry(QtCore.QRect(940, 700, 121, 28))
        self.AddTo_2.setObjectName("AddTo_2")
        self.label_texts_2 = QtWidgets.QLabel(dialog)
        self.label_texts_2.setGeometry(QtCore.QRect(594, 60, 41, 21))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_texts_2.setFont(font)
        self.label_texts_2.setObjectName("label_texts_2")
        self.label_texts_3 = QtWidgets.QLabel(dialog)
        self.label_texts_3.setGeometry(QtCore.QRect(690, 60, 81, 21))
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(12)
        self.label_texts_3.setFont(font)
        self.label_texts_3.setObjectName("label_texts_3")
        self.label_picture.raise_()
        self.closeWinBtn.raise_()
        self.spinBox_season.raise_()
        self.spinBox_year.raise_()
        self.label_texts.raise_()
        self.pushButton.raise_()
        self.label_result1.raise_()
        self.AddTo.raise_()
        self.label_result2.raise_()
        self.AddTo_2.raise_()
        self.label_texts_2.raise_()
        self.label_texts_3.raise_()

        self.retranslateUi(dialog)
        self.closeWinBtn.clicked.connect(dialog.close)
        QtCore.QMetaObject.connectSlotsByName(dialog)

        self.pushButton.clicked.connect(self.on_click)
        self.AddTo.clicked.connect(self.put_into_report1)
        self.AddTo_2.clicked.connect(self.put_into_report2)

    def retranslateUi(self, dialog):
        _translate = QtCore.QCoreApplication.translate
        dialog.setWindowTitle(_translate("dialog", "票房份额"))
        self.closeWinBtn.setText(_translate("dialog", "返回上一级"))
        self.label_texts.setText(_translate("dialog", "选择时间"))
        self.pushButton.setText(_translate("dialog", "生成图表"))
        self.AddTo.setText(_translate("dialog", "加入到数据报表"))
        self.AddTo_2.setText(_translate("dialog", "加入到数据报表"))
        self.label_texts_2.setText(_translate("dialog", "年第"))
        self.label_texts_3.setText(_translate("dialog", "季度"))

    def on_click(self, dialog):
        Straight(self.spinBox_year.value(), self.spinBox_season.value())
        pie(self.spinBox_year.value(), self.spinBox_season.value())

        pwd = os.getcwd()
        url_string1 = os.path.abspath('./SE12_Cache/Straight.html')
        self.label_result1.load(QUrl.fromLocalFile(url_string1))

        url_string2 = os.path.abspath('./SE12_Cache/Pie.html')
        self.label_result2.load(QUrl.fromLocalFile(url_string2))

    def cut_image1(self, dialog):
        size = self.label_result1.size()
        img = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(img)
        self.label_result1.render(painter)
        self.label_result1.render(painter)
        img.save('./SE12_Cache/Straight.png')
        painter.end()

    def cut_image2(self, dialog):
        size = self.label_result2.size()
        img = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(img)
        self.label_result2.render(painter)
        self.label_result2.render(painter)
        img.save('./SE12_Cache/Pie.png')
        painter.end()

    def put_into_report1(self, dialog):
        try:
            doc = Document('report.docx')
        except Exception:
            #不存在文件则新建
            self.cut_image1(dialog)
            doc = Document()
            doc.save('report.docx')
            doc = Document('report.docx')
            #插入图片
            images = './SE12_Cache/Straight.png'  # 要插入的图片
            doc.add_paragraph('\n')  # 添加文字
            doc.add_picture(images, width=Inches(6))  # 添加图, 设置宽度
            doc.save('report.docx')  # 保存路径
            print('Add picture to report Succesfully.')
        else:
            self.cut_image1(dialog)
            images = './SE12_Cache/Straight.png'
            doc.add_paragraph('\n')
            doc.add_picture(images, width=Inches(6))
            doc.save('report.docx')
            print('Add picture to report Succesfully.')

    def put_into_report2(self, dialog):
        try:
            doc = Document('report.docx')
        except Exception:
            #不存在文件则新建
            self.cut_image2(dialog)
            doc = Document()
            doc.save('report.docx')
            doc = Document('report.docx')
            #插入图片
            images = './SE12_Cache/Pie.png'  # 要插入的图片
            doc.add_paragraph('\n')  # 添加文字
            doc.add_picture(images, width=Inches(6))  # 添加图, 设置宽度
            doc.save('report.docx')  # 保存路径
            print('Add picture to report Succesfully.')
        else:
            self.cut_image2(dialog)
            images = './SE12_Cache/Pie.png'
            doc.add_paragraph('\n')
            doc.add_picture(images, width=Inches(6))
            doc.save('report.docx')
            print('Add picture to report Succesfully.')
コード例 #6
0
class PageThumbnailer(QObject):
    """
    Class implementing a thumbnail creator for web sites.
    
    @signal thumbnailCreated(QPixmap) emitted after the thumbnail has been
        created
    """
    thumbnailCreated = pyqtSignal(QPixmap)

    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent object (QObject)
        """
        super(PageThumbnailer, self).__init__(parent)

        self.__size = QSize(231, 130)
        self.__loadTitle = False
        self.__title = ""
        self.__url = QUrl()

        self.__view = QWebEngineView()
        self.__view.setAttribute(Qt.WA_DontShowOnScreen)
        self.__view.resize(1920, 1080)
        self.__view.show()

    def setSize(self, size):
        """
        Public method to set the size of the image.
        
        @param size size of the image (QSize)
        """
        if size.isValid():
            self.__size = QSize(size)

    def setUrl(self, url):
        """
        Public method to set the URL of the site to be thumbnailed.
        
        @param url URL of the web site (QUrl)
        """
        if url.isValid():
            self.__url = QUrl(url)

    def url(self):
        """
        Public method to get the URL of the thumbnail.
        
        @return URL of the thumbnail (QUrl)
        """
        return QUrl(self.__url)

    def loadTitle(self):
        """
        Public method to check, if the title is loaded from the web site.
        
        @return flag indicating, that the title is loaded (boolean)
        """
        return self.__loadTitle

    def setLoadTitle(self, load):
        """
        Public method to set a flag indicating to load the title from
        the web site.
        
        @param load flag indicating to load the title (boolean)
        """
        self.__loadTitle = load

    def title(self):
        """
        Public method to get the title of the thumbnail.
        
        @return title of the thumbnail (string)
        """
        if self.__title:
            title = self.__title
        else:
            title = self.__url.host()
        if not title:
            title = self.__url.toString()
        return title

    def start(self):
        """
        Public method to start the thumbnailing action.
        """
        self.__view.loadFinished.connect(self.__createThumbnail)
        self.__view.load(self.__url)

    def __createThumbnail(self, status):
        """
        Private slot creating the thumbnail of the web site.
        
        @param status flag indicating a successful load of the web site
            (boolean)
        """
        if not status:
            self.thumbnailCreated.emit(QPixmap())
            return

        QTimer.singleShot(1000, self.__grabThumbnail)

    def __grabThumbnail(self):
        """
        Private slot to grab the thumbnail image from the view.
        """
        self.__title = self.__view.title()

        image = QImage(self.__view.size(), QImage.Format_ARGB32)
        painter = QPainter(image)
        self.__view.render(painter)
        painter.end()

        scaledImage = image.scaled(self.__size, Qt.KeepAspectRatioByExpanding,
                                   Qt.SmoothTransformation)

        self.thumbnailCreated.emit(QPixmap.fromImage(scaledImage))