我想通过构建一个简单的浏览器应用程序来深入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(如果是 - 如何),还是应该以完全不同的方式附加开发工具?
答案 0 :(得分:0)
如您所述,检查员不是小工具。这是一个网页,因此您需要为其创建另一个Web视图。您可以通过获取self.window.props.web_inspector
(不创建新检查器)并连接到其inspect-web-view
信号来执行此操作。在该信号处理程序中,您需要创建一个新的webview,将该webview添加到窗口或要显示它的任何位置,然后将其返回。
您可能还想处理show-window
,attach-window
,detach-window
和close-window
信号。
此处有更多文档:inspect-web-view
答案 1 :(得分:0)
在单独的窗口中运行Inspector的示例。 Webkit的GTK。
这个要点没有连接很多信号。
https://gist.github.com/alex-eri/53518825b2a8a50dd1695c69ee5058cc