Python Webkit-Browser:附加开发人员工具栏的问题

时间:2014-02-15 21:47:06

标签: python webkit gtk glade

我想通过构建一个简单的浏览器应用程序来深入Python。我已经疯了一个带有教程的简约webkitbrowser,现在想扩展程序,但我遇到了一些我无法解决的小问题。


Python 3.3.3
使用Glade作为用户界面

第一步是立即添加第二个scrolledWindow,其中开发人员工具应该立即加载。

到目前为止,

Here是我的.ui文件,这是python代码:

from gi.repository import Gtk, WebKit    

UI_FILE = "browser.ui"    

class Browser:
    """A simple Webkit-Browser in GTK+"""
    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_from_file(UI_FILE)
        self.builder.connect_signals(self)

        self.back = self.builder.get_object("back")
        self.forward = self.builder.get_object("forward")
        self.adress = self.builder.get_object("adress")

        self.webview = WebKit.WebView()
        scrolled_window = self.builder.get_object("scrolledwindow")
        scrolled_window.add(self.webview)

        self.settings = WebKit.WebSettings()
        self.settings.set_property('enable-developer-extras', True)

        self.webview.set_settings(self.settings)

        self.devtools = WebKit.WebInspector()
        scrolled_window_dev = self.builder.get_object("scrolledwindowDev")
        scrolled_window_dev.add(self.devtools)

                         ^^^^^

        self.webview.connect("title-changed", self.on_title_changed)

        self.window = self.builder.get_object("window")
        self.window.show_all()

    def on_title_changed(self, webview, frame, title):
        self.window.set_title(title)

    def on_button_clicked(self, button):
        if button.get_stock_id() == Gtk.STOCK_GO_FORWARD:
            self.webview.go_forward()
        elif button.get_stock_id() == Gtk.STOCK_GO_BACK:
            self.webview.go_back()

    def on_entry_activate(self, widget):
        url = widget.get_text()
        if not "http://" in url:
            url = "http://"+url
        self.webview.load_uri(url)

    def destroy(self, window):
        Gtk.main_quit()


def main():
    app = Browser()
    Gtk.main()

if __name__ == "__main__":
    main()


我收到了错误

  

TypeError:参数widget:预期的Gtk.Widget,但得到了   gi.repository.WebKit.WebInspector

好的,这是在Webkit的reference中说明的,WebInspector是一个GObject而不是GtkWidget。但我现在不知道该怎么做。

那么,我可以从GObject创建一个GtkWidget(如果是 - 如何),还是应该以完全不同的方式附加开发工具?

2 个答案:

答案 0 :(得分:0)

如您所述,检查员不是小工具。这是一个网页,因此您需要为其创建另一个Web视图。您可以通过获取self.window.props.web_inspector(不创建新检查器)并连接到其inspect-web-view信号来执行此操作。在该信号处理程序中,您需要创建一个新的webview,将该webview添加到窗口或要显示它的任何位置,然后将其返回。

您可能还想处理show-windowattach-windowdetach-windowclose-window信号。

此处有更多文档:inspect-web-view

答案 1 :(得分:0)

在单独的窗口中运行Inspector的示例。 Webkit的GTK。

这个要点没有连接很多信号。

https://gist.github.com/alex-eri/53518825b2a8a50dd1695c69ee5058cc