【发布时间】: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(如果是的话 - 如何)还是应该以完全不同的方式附加开发工具?
【问题讨论】: