5

I just started dwelling into the realm of Qt (coming from PyGTK) and I'm using PySide. So I found this great example on another answer here on stack exchange.

import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtWebKit import *

app = QApplication(sys.argv)

web = QWebView()
web.settings().setAttribute(
  QWebSettings.WebAttribute.DeveloperExtrasEnabled, True)
# or globally:
# QWebSettings.globalSettings().setAttribute(
#     QWebSettings.WebAttribute.DeveloperExtrasEnabled, True)

web.load(QUrl("http://www.google.com"))
web.show()

inspect = QWebInspector()
inspect.setPage(web.page())
inspect.show()

sys.exit(app.exec_())

My question is as follows, how do I make the inspector show up in the same window instead of a new one? I understand I need to add the QWebInspector to another widget inside the main window (a vbox for example), what I want to know is how to connect that event to the signal the context menu "Inspect" triggers. In PyGTK I would need to use .connect() but I can't find the right SIGNAL for this specific action.

Thanks for your time guys/gals

Community
  • 1
  • 1
skkeeper
  • 117
  • 1
  • 11

1 Answers1

4

It shouldn't be necessary to do anything special for the context menu to work. Just add an inspector widget to your layout, and hide() it to start with. The default context menu action can then show() the inspector as needed.

A slightly trickier issue is how to hide the inspector again once it's shown, as there doesn't seem to be a corresponding context menu item for that.

The demo script below simply creates a keyboard shortcut to hide/show the inspector:

from PySide import QtGui, QtCore, QtWebKit

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.view = QtWebKit.QWebView(self)
        self.view.settings().setAttribute(
            QtWebKit.QWebSettings.WebAttribute.DeveloperExtrasEnabled, True)
        self.inspector = QtWebKit.QWebInspector(self)
        self.inspector.setPage(self.view.page())
        self.inspector.hide()
        self.splitter = QtGui.QSplitter(self)
        self.splitter.addWidget(self.view)
        self.splitter.addWidget(self.inspector)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.splitter)
        QtGui.QShortcut(QtGui.QKeySequence('F7'), self,
            self.handleShowInspector)

    def handleShowInspector(self):
        self.inspector.setShown(self.inspector.isHidden())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.view.load(QtCore.QUrl('http://www.google.com'))
    window.show()
    sys.exit(app.exec_())
ekhumoro
  • 115,249
  • 20
  • 229
  • 336
  • thank you, I'm still looking on how I can customize the action on the default context menu, but your answer made me understand better how the inspector object works. – skkeeper Nov 17 '12 at 21:40