PyQT: QWebView with custom QNetworkAccessManager
Gelonida
gelonida at gmail.com
Tue Feb 1 20:37:06 EST 2011
On 02/02/2011 12:31 AM, Gelonida wrote:
> Hi,
>
> I would like to subclass QNetworkAccessManager and
> create a subclass of QWebView, that will use the subclassed
> QNetworkAccessManager for all accesses.
>
> Is this possible?
> I have really no idea when and how I could achieve this.
>
> Thanks in advance for any suggestions / pointers
>
Well I answer my own question.
In fact my first experiments failed horribly due to a tiny PyQt detail.
I expected that, the variable new_manager does not have to be persistent.
I naively assumed, that a call to setNetworkAccessManager() would keep a
reference to new_manager and thus avoid its destruction this does not
seem to be the case.
Below an example of how to create a QQWebview with a custom
NetworkAccessManager
import sys
import PyQt4.QtGui as QtGui
import PyQt4.QtCore as QtCore
import PyQt4.QtWebKit as QtWebKit
from PyQt4.QtNetwork import QNetworkAccessManager
class MyNetworkAccessManager(QNetworkAccessManager):
def __init__(self, old_manager):
QNetworkAccessManager.__init__(self)
self.setCache(old_manager.cache())
self.setCookieJar(old_manager.cookieJar())
self.setProxy(old_manager.proxy())
self.setProxyFactory(old_manager.proxyFactory())
def createRequest(self, operation, request, data):
print "mymanager handles ", request.url()
return QNetworkAccessManager.createRequest(
self, operation, request, data)
def set_new_manager(web):
global new_manager # if this line is commented I will se
old_manager = web.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
web.page().setNetworkAccessManager(new_manager)
app = QtGui.QApplication(sys.argv)
web = QtWebKit.QWebView()
set_new_manager()
web.setUrl( QtCore.QUrl("http://www.google.com") )
web.show()
sys.exit(app.exec_())
More information about the Python-list
mailing list