class HTMLViewer(QtGui.QWidget): def __init__(self, parent=None): super(HTMLViewer, self).__init__(parent) self.view = QWebView(self) layout = QtGui.QVBoxLayout(self) layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.view) # Create ContextMenu context_menu = QtGui.QMenu(self.view) def open_context_menu(point): context_menu.exec_(self.view.mapToGlobal(point)) self.view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.view.customContextMenuRequested.connect(open_context_menu) action = QtGui.QAction('&Back', self, shortcut=QtGui.QKeySequence.Back, statusTip="Click to go back", triggered=self.view.back) action.setShortcut('Backspace') context_menu.addAction(action) action = QtGui.QAction('&Forward', self, shortcut=QtGui.QKeySequence.Forward, statusTip="Click to go forward", triggered=self.view.forward) action.setShortcut('Shift + Backspace') context_menu.addAction(action) action = QtGui.QAction('&Reload', self, shortcut=QtGui.QKeySequence.Refresh, statusTip="Click to refresh", triggered=self.view.reload) context_menu.addAction(action) context_menu.addSeparator() action = QtGui.QAction('&Print', self, shortcut=QtGui.QKeySequence.Print, statusTip="Click to print", triggered=self.print_) context_menu.addAction(action) def contextMenuEvent(self, event): self.context_menu.exec_(event.globalPos()) def print_(self): printer = QtGui.QPrinter() printer_dialog = QtGui.QPrintDialog(printer, self.view) if printer_dialog.exec_() != QtGui.QDialog.Accepted: # do nothing return # printout the view with selected printer self.view.print_(printer) # --- slots @QtCore.Slot(unicode) def update(self, value): # save vertical/horizontal scrollbar value m = self.view.page().mainFrame() v = m.scrollBarValue(QtCore.Qt.Vertical) h = m.scrollBarValue(QtCore.Qt.Horizontal) # set new HTML (value should be unicode) self.view.setHtml(value) # update vertical/horizontal scrollbar value m = self.view.page().mainFrame() m.setScrollBarValue(QtCore.Qt.Vertical, v) m.setScrollBarValue(QtCore.Qt.Horizontal, h)
#!/usr/bin/env python import sys, os from PySide.QtCore import QObject, Slot, Property, QUrl, QSize, Qt from PySide.QtGui import QApplication, QDesktopServices from PySide.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from PySide.QtWebKit import QWebView, QWebInspector, QWebPage, QWebSettings app = QApplication(sys.argv) wv = QWebView() wv.setContextMenuPolicy(Qt.NoContextMenu) page = wv.page() mainFrame = page.mainFrame() inspector = QWebInspector() inspector.setPage(page) class WebStoryNetworkAccessManager(QNetworkAccessManager): def __init__(self, parent=None): super(WebStoryNetworkAccessManager, self).__init__(parent) self.allowedUrls = set() self.allowedHosts = set() def addAllowedUrl(self, url): self.allowedUrls.add(url) def addAllowedHost(self, host):