gtk-builder-error-quark:无效的对象类型'WebKitWebView'

问题描述 投票:0回答:1

[尝试通过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,但老实说,我并没有像答案所说的那样“明白”。

python gtk webkit gtk3
1个回答
0
投票
在ui.glade文件中,将WebKitWebView替换为GtkScrolledWindow,也许像'scrolled_window'这样的ID更合适。然后,将expand属性设置为'True'。

阅读林间空地文件后,您可以执行以下操作:

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上,看起来像这样:

Demo Webkit.WebView

© www.soinside.com 2019 - 2024. All rights reserved.