【问题标题】:Python Webkit-Browser: Problems on attaching the developer-toolbarPython Webkit-Browser:附加开发者工具栏的问题
【发布时间】:2014-02-15 21:47:06
【问题描述】:

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


Python 3.3.3
为 UI 使用 Glade

第一步是简单地添加第二个滚动窗口,开发者工具应该立即加载到该窗口中。

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: argument widget: Expected Gtk.Widget, but got gi.repository.WebKit.WebInspector

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

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

【问题讨论】:

    标签: python webkit gtk glade


    【解决方案1】:

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

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

    更多文档在这里:inspect-web-view

    【讨论】:

      【解决方案2】:

      在单独的窗口中运行 Inspector 的示例。 Webkit-gtk.

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-09
        • 2018-05-06
        相关资源
        最近更新 更多