class TextMediaView(MediaView): def __init__(self, media, parent): super(TextMediaView, self).__init__(media, parent) self.widget = QWebEngineView(parent) self.widget.setGeometry(media['geometry']) self.set_default_widget_prop() self.widget.setDisabled(True) @Slot() def play(self): self.finished = 0 path = '%s/%s_%s_%s.html' % (self.save_dir, self.layout_id, self.region_id, self.id) self.widget.load('file:///' + path) self.widget.show() self.widget.raise_() if float(self.duration) > 0: self.play_timer.setInterval(int(float(self.duration) * 1000)) self.play_timer.start() self.started_signal.emit() @Slot() def stop(self, delete_widget=False): #---- kong ---- if not self.widget: return False super(TextMediaView, self).stop(delete_widget) return True
class WebMediaView_(MediaView): def __init__(self, media, parent): super(WebMediaView_, self).__init__(media, parent) self.widget = QWebEngineView(parent) self.widget.setGeometry(media['geometry']) self.set_default_widget_prop() self.widget.setDisabled(True) @Slot() def play(self): self.finished = 0 url = self.options['uri'] self.widget.load( QUrl.fromPercentEncoding(QByteArray(url.encode('utf-8')))) self.widget.show() self.widget.raise_() if float(self.duration) > 0: self.play_timer.setInterval(int(float(self.duration) * 1000)) self.play_timer.start() self.started_signal.emit() @Slot() def stop(self, delete_widget=False): #---- kong ---- if not self.widget: return False super(WebMediaView_, self).stop(delete_widget) return True
class Page(QWebEnginePage): def __init__(self, view): super(Page, self).__init__() self.parent = view.parent self.view = view self.result = None self.fullView = QWebEngineView() self.exitFSAction = QAction(self.fullView) self.loop = None def javaScriptConsoleMessage(self, level, msg, line, sourceid): """Override javaScriptConsoleMessage to use debug log.""" if level == QWebEnginePage.InfoMessageLevel: print("JS - INFO - Ligne {} : {}".format(line, msg)) elif level == QWebEnginePage.WarningMessageLevel: print("JS - WARNING - Ligne {} : {}".format(line, msg)) else: print("JS - ERROR - Ligne {} : {}".format(line, msg)) def hittestcontent(self, pos): return WebHitTestResult(self, pos) def maptoviewport(self, pos): return QPointF(pos.x(), pos.y()) def executejavascript(self, scriptsrc): self.loop = QEventLoop() self.result = None QTimer.singleShot(250, self.loop.quit) self.runJavaScript(scriptsrc, self.callbackjs) self.loop.exec_() self.loop = None return self.result def callbackjs(self, res): if self.loop is not None and self.loop.isRunning(): self.result = res self.loop.quit() def vsource(self): if "view-source:http" in self.url().toString(): self.load(QUrl(self.url().toString().split("view-source:")[1])) else: self.triggerAction(self.ViewSource) def makefullscreen(self, request): if request.toggleOn(): self.fullView = QWebEngineView() self.exitFSAction = QAction(self.fullView) self.exitFSAction.setShortcut(Qt.Key_Escape) self.exitFSAction.triggered.connect( lambda: self.triggerAction(self.ExitFullScreen)) self.fullView.addAction(self.exitFSAction) self.setView(self.fullView) self.fullView.showFullScreen() self.fullView.raise_() else: del self.fullView self.setView(self.view) request.accept()