From afc5e5724db0d874930be7e62d4bd4fc4fac99bd Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Tue, 9 May 2017 01:10:37 +0100 Subject: [PATCH] Adds support for PyQt5, fixes #19 --- tags | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wrp.py | 57 ++++++++++++++++++++++++++++++++------------- 2 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 tags diff --git a/tags b/tags new file mode 100644 index 0000000..3468958 --- /dev/null +++ b/tags @@ -0,0 +1,73 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ +!_TAG_PROGRAM_NAME Exuberant Ctags // +!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ +!_TAG_PROGRAM_VERSION 5.8 // +AppDelegate wrp.py /^ class AppDelegate(Foundation.NSObject):$/;" kind:class line:431 +AppKit wrp.py /^ import AppKit$/;" kind:namespace line:428 +CustomWebPage wrp.py /^ class CustomWebPage(QWebPage):$/;" kind:class line:314 +Foundation wrp.py /^ import Foundation$/;" kind:namespace line:426 +HEIGHT wrp.py /^HEIGHT = 768$/;" kind:variable line:44 +ISMAP wrp.py /^ISMAP = "true"$/;" kind:variable line:45 +PORT wrp.py /^PORT = 8080$/;" kind:variable line:42 +Proxy wrp.py /^class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):$/;" kind:class line:590 +PyQt4 wrp.py /^ import PyQt4.QtCore$/;" kind:namespace line:707 +QUALITY wrp.py /^QUALITY = 80 # jpeg image quality 0-100 $/;" kind:variable line:47 +QtCore wrp.py /^ import PyQt4.QtCore$/;" kind:namespace line:707 +Queue wrp.py /^import Queue$/;" kind:namespace line:59 +RENDERS wrp.py /^RENDERS = {}$/;" kind:variable line:69 +REQ wrp.py /^REQ = Queue.Queue()$/;" kind:variable line:65 +RESP wrp.py /^RESP = Queue.Queue()$/;" kind:variable line:67 +SimpleHTTPServer wrp.py /^import SimpleHTTPServer$/;" kind:namespace line:57 +SocketServer wrp.py /^import SocketServer$/;" kind:namespace line:56 +StringIO wrp.py /^import StringIO$/;" kind:namespace line:62 +WAIT wrp.py /^WAIT = 1 # sleep for 1 second to allow javascript renders$/;" kind:variable line:46 +WIDTH wrp.py /^WIDTH = 1024$/;" kind:variable line:43 +WebKit wrp.py /^ import WebKit$/;" kind:namespace line:427 +WebkitLoad wrp.py /^ class WebkitLoad(Foundation.NSObject, WebKit.protocols.WebFrameLoadDelegate):$/;" kind:class line:437 +WebkitRenderer wrp.py /^ class WebkitRenderer(QObject):$/;" kind:class line:87 +_WebkitRendererHelper wrp.py /^ class _WebkitRendererHelper(QObject):$/;" kind:class line:131 +__del__ wrp.py /^ def __del__(self):$/;" kind:member line:178 +__init__ wrp.py /^ def __init__(self, **kwargs):$/;" kind:member line:315 +__init__ wrp.py /^ def __init__(self, **kwargs):$/;" kind:member line:88 +__init__ wrp.py /^ def __init__(self, parent):$/;" kind:member line:137 +__main_qt wrp.py /^ def __main_qt():$/;" kind:function line:377 +__version__ wrp.py /^__version__ = "1.4"$/;" kind:variable line:8 +_load_page wrp.py /^ def _load_page(self, url, width, height, timeout):$/;" kind:member line:255 +_on_each_reply wrp.py /^ def _on_each_reply(self, reply):$/;" kind:member line:288 +_on_load_finished wrp.py /^ def _on_load_finished(self, result):$/;" kind:member line:299 +_on_load_started wrp.py /^ def _on_load_started(self):$/;" kind:member line:293 +_on_ssl_errors wrp.py /^ def _on_ssl_errors(self, reply, errors):$/;" kind:member line:308 +applicationDidFinishLaunching_ wrp.py /^ def applicationDidFinishLaunching_(self, aNotification):$/;" kind:member line:433 +captureView wrp.py /^ def captureView(self, view):$/;" kind:member line:481 +do_GET wrp.py /^ def do_GET(self):$/;" kind:member line:591 +getURL wrp.py /^ def getURL(self, webview):$/;" kind:member line:451 +init_qtgui wrp.py /^ def init_qtgui(display=None, style=None, qtargs=None):$/;" kind:function line:349 +javaScriptAlert wrp.py /^ def javaScriptAlert(self, frame, message):$/;" kind:member line:319 +javaScriptConfirm wrp.py /^ def javaScriptConfirm(self, frame, message):$/;" kind:member line:322 +javaScriptPrompt wrp.py /^ def javaScriptPrompt(self, frame, message, default, result):$/;" kind:member line:326 +logger wrp.py /^ logger = logging.getLogger('wrp')$/;" kind:variable line:83 +logging wrp.py /^import logging$/;" kind:namespace line:61 +main wrp.py /^def main():$/;" kind:function line:701 +main_cocoa wrp.py /^ def main_cocoa():$/;" kind:function line:563 +objc wrp.py /^ import objc$/;" kind:namespace line:429 +os wrp.py /^import os$/;" kind:namespace line:51 +random wrp.py /^import random$/;" kind:namespace line:50 +re wrp.py /^import re$/;" kind:namespace line:49 +render wrp.py /^ def render(self, url):$/;" kind:member line:115 +render wrp.py /^ def render(self, url):$/;" kind:member line:185 +resetWebview wrp.py /^ def resetWebview(self, webview):$/;" kind:member line:476 +run_proxy wrp.py /^def run_proxy():$/;" kind:function line:695 +shouldInterruptJavaScript wrp.py /^ def shouldInterruptJavaScript(self):$/;" kind:member line:339 +signal wrp.py /^ import signal$/;" kind:namespace line:706 +socket wrp.py /^import socket$/;" kind:namespace line:55 +string wrp.py /^import string$/;" kind:namespace line:53 +sys wrp.py /^import sys$/;" kind:namespace line:60 +threading wrp.py /^import threading$/;" kind:namespace line:58 +time wrp.py /^import time$/;" kind:namespace line:52 +urllib wrp.py /^import urllib$/;" kind:namespace line:54 +webView_didFailLoadWithError_forFrame_ wrp.py /^ def webView_didFailLoadWithError_forFrame_(self, webview, error, frame):$/;" kind:member line:439 +webView_didFailProvisionalLoadWithError_forFrame_ wrp.py /^ def webView_didFailProvisionalLoadWithError_forFrame_(self, webview, error, frame):$/;" kind:member line:445 +webView_didFinishLoadForFrame_ wrp.py /^ def webView_didFinishLoadForFrame_(self, webview, frame):$/;" kind:member line:497 +wrp.py wrp.py 1;" kind:file line:1 diff --git a/wrp.py b/wrp.py index 7225be5..e8d1d00 100755 --- a/wrp.py +++ b/wrp.py @@ -73,10 +73,20 @@ RENDERS = {} ####################### if sys.platform == "linux" or sys.platform == "linux2": - from PyQt4.QtCore import * - from PyQt4.QtGui import * - from PyQt4.QtWebKit import * - from PyQt4.QtNetwork import * + try: + from PyQt5.QtCore import * + from PyQt5.QtGui import * + from PyQt5.QtWebKit import * + from PyQt5.QtWebKitWidgets import * + from PyQt5.QtNetwork import * + from PyQt5.QtWidgets import * + IsPyQt5 = True + except ImportError: + from PyQt4.QtCore import * + from PyQt4.QtGui import * + from PyQt4.QtWebKit import * + from PyQt4.QtNetwork import * + IsPyQt5 = False # claunia: Check how to use this in macOS logging.basicConfig(filename='/dev/stdout', level=logging.WARN, ) @@ -157,14 +167,20 @@ if sys.platform == "linux" or sys.platform == "linux2": self._page.settings().setAttribute(key, value) # Connect required event listeners - self.connect(self._page, SIGNAL("loadFinished(bool)"), self._on_load_finished) - self.connect(self._page, SIGNAL("loadStarted()"), self._on_load_started) - self.connect(self._page.networkAccessManager(), - SIGNAL("sslErrors(QNetworkReply *,const QList&)"), - self._on_ssl_errors) - self.connect(self._page.networkAccessManager(), - SIGNAL("finished(QNetworkReply *)"), - self._on_each_reply) + if IsPyQt5: + self._page.loadFinished.connect(self._on_load_finished) + self._page.loadStarted.connect(self._on_load_started) + self._page.networkAccessManager().sslErrors.connect(self._on_ssl_errors) + self._page.networkAccessManager().finished.connect(self._on_each_reply) + else: + self.connect(self._page, SIGNAL("loadFinished(bool)"), self._on_load_finished) + self.connect(self._page, SIGNAL("loadStarted()"), self._on_load_started) + self.connect(self._page.networkAccessManager(), + SIGNAL("sslErrors(QNetworkReply *,const QList&)"), + self._on_ssl_errors) + self.connect(self._page.networkAccessManager(), + SIGNAL("finished(QNetworkReply *)"), + self._on_each_reply) # The way we will use this, it seems to be unesseccary to have Scrollbars enabled self._page.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) @@ -204,9 +220,15 @@ if sys.platform == "linux" or sys.platform == "linux2": # window still has the focus when the screen is # grabbed. This might result in a race condition. self._view.activateWindow() - image = QPixmap.grabWindow(self._window.winId()) + if IsPyQt5: + image = QScreen.grabWindow(self._window.winId()) + else: + image = QPixmap.grabWindow(self._window.winId()) else: - image = QPixmap.grabWidget(self._window) + if IsPyQt5: + image = QWidget.grab(self._window) + else: + image = QPixmap.grabWidget(self._window) httpout = WebkitRenderer.httpout @@ -704,13 +726,16 @@ def main(): if sys.platform == "linux" or sys.platform == "linux2": import signal - import PyQt4.QtCore + try: + import PyQt5.QtCore + except ImportError: + import PyQt4.QtCore # Initialize Qt-Application, but make this script # abortable via CTRL-C app = init_qtgui(display=None, style=None) signal.signal(signal.SIGINT, signal.SIG_DFL) - PyQt4.QtCore.QTimer.singleShot(0, __main_qt) + QTimer.singleShot(0, __main_qt) sys.exit(app.exec_()) elif sys.platform == "darwin": main_cocoa()