From ef6f858319e3276d330a2ad6f13a87a050867fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20Leonardo=20Casta=C3=B1o?= Date: Wed, 21 Feb 2018 22:54:21 -0300 Subject: [PATCH] Migrate deprecated PyQt 5.5 to new PyQt 5.10 Migrate from WebKit to WebEngine --- gui.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/gui.py b/gui.py index b78cc27..e17e5cb 100644 --- a/gui.py +++ b/gui.py @@ -1,7 +1,5 @@ import sys -import webbrowser - -from PyQt5 import QtCore, QtWidgets, QtWebKitWidgets, QtGui +from PyQt5 import QtCore, QtWidgets, QtGui, QtWebEngineWidgets def init_gui(application, port=5000, width=300, height=400, @@ -10,37 +8,43 @@ def init_gui(application, port=5000, width=300, height=400, ROOT_URL = 'http://localhost:{}'.format(port) # open links in browser from http://stackoverflow.com/a/3188942/1103397 :D - def link_clicked(url): + # thanks to https://github.com/marczellm/qhangups/blob/cfed73ee4383caed1568c0183a9906180f01cb00/qhangups/WebEnginePage.py + def link_clicked(url, typ, ismainframe): ready_url = url.toEncoded().data().decode() - if ROOT_URL not in ready_url: - webbrowser.open(ready_url) - else: - window.webView.load(QtCore.QUrl(ready_url)) + is_clicked = typ == QtWebEngineWidgets.QWebEnginePage.NavigationTypeLinkClicked + is_not_internal = ROOT_URL not in ready_url + if is_clicked and is_not_internal: + QtGui.QDesktopServices.openUrl(url) + return False + return True def run_app(): application.run(port=port, threaded=True) + # Application Level qtapp = QtWidgets.QApplication(sys.argv) - webapp = QtCore.QThread() webapp.__del__ = webapp.wait webapp.run = run_app webapp.start() - qtapp.aboutToQuit.connect(webapp.terminate) + # Main Window Level window = QtWidgets.QMainWindow() window.resize(width, height) window.setWindowTitle(window_title) - window.webView = QtWebKitWidgets.QWebView(window) - window.setCentralWidget(window.webView) window.setWindowIcon(QtGui.QIcon(icon)) - window.webView.page().setLinkDelegationPolicy( - QtWebKitWidgets.QWebPage.DelegateAllLinks) - window.webView.page().linkClicked.connect(link_clicked) + # WebView Level + window.webView = QtWebEngineWidgets.QWebEngineView(window) + window.setCentralWidget(window.webView) + + # WebPage Level + page = QtWebEngineWidgets.QWebEnginePage() + page.acceptNavigationRequest = link_clicked + page.load(QtCore.QUrl(ROOT_URL)) + window.webView.setPage(page) - window.webView.load(QtCore.QUrl(ROOT_URL)) window.show() return qtapp.exec_()