[尝试通过WebKitWebView
获取Gtk.builder()
对象时出现以下错误:
$ python3 test.py
Traceback (most recent call last):
File "test.py", line 11, in <module>
builder.add_from_file("ui.glade")
gi.repository.GLib.Error: gtk-builder-error-quark: ui.glade:31:1 Invalid object type 'WebKitWebView' (6)
这是我的Python代码
#!/usr/bin/env python
import gi
gi.require_version('WebKit2', '4.0')
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import WebKit2 as Webkit
builder = Gtk.Builder()
builder.add_from_file("ui.glade")
window = builder.get_object("window")
window.set_title("Test")
webview = builder.get_object("webview")
if __name__ == "__main__":
window.show_all()
Gtk.main()
这是我的ui.glade
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<requires lib="webkit2gtk" version="2.12"/>
<object class="GtkWindow" id="window">
<property name="width_request">800</property>
<property name="height_request">600</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="WebKitWebView" id="webview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
还有一个类似的问题here,但老实说,我并没有像答案所说的那样“明白”。
阅读林间空地文件后,您可以执行以下操作:
scrolled_window = builder.get_object("scrolled")
scrolled_window.add_with_viewport(webview)
webview.load_uri("https://www.google.com")
完整示例
您稍作修改的代码将如下所示:
#!/usr/bin/env python import gi gi.require_version('WebKit2', '4.0') gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import WebKit2 as Webkit webview = Webkit.WebView() builder = Gtk.Builder() builder.add_from_file("ui.glade") window = builder.get_object("window") window.set_title("Test") scrolled_window = builder.get_object("scrolled_window") scrolled_window.add_with_viewport(webview) webview.load_uri("https://www.google.com") if __name__ == "__main__": window.show_all() Gtk.main()
Glade文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<requires lib="webkit2gtk" version="2.12"/>
<object class="GtkWindow" id="window">
<property name="width_request">800</property>
<property name="height_request">600</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkEntry">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolled_wi
ndow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Demo
在Ubuntu上,看起来像这样: