【问题标题】:Some SVG elements not rendering in python webkitgtk application一些 SVG 元素未在 python webkitgtk 应用程序中呈现
【发布时间】:2019-06-13 13:10:44
【问题描述】:

我正在编写一个小应用程序来使用 python gtk3 绑定与 WebKit 和 SchemDraw 生成电路图。我的意图是使用 SchemDraw 的 svg 输出(内部使用 matplotlib)并将其呈现在 WebView 小部件中。当我加载由 matplotlib(来自文件和 StringIO)生成的 svg 时,WebView 窗口中缺少一些水平和垂直线元素。

我尝试在多个浏览器(Firefox、Google Chrome 和 Epiphany)中打开相同的 svg 文件,并且所有元素都正确呈现。我认为 Epiphany 会是一个很好的测试,因为它似乎使用了 WebView 实例,尽管是在 C 语言中。

gtk 程序:

import pgi as gi
gi.install_as_gi()
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import WebKit
print ("PyGtk v%s" % gi.__version__)

# Test webkit SVG rendering
window = Gtk.Window(title="Hello World")
webview1 = WebKit.WebView()
webview1.open('file:///redacted_path/example.svg')
window.add(webview1)
window.show_all()
window.connect("destroy", Gtk.main_quit)
Gtk.main()

呈现 example.svg 的代码(SchemDraw 网站上的示例):

import SchemDraw as schem
import SchemDraw.elements as e
d = schem.Drawing()
V1 = d.add(e.SOURCE_V, label='10V')
d.add(e.RES, d='right', label='100K$\Omega$')
d.add(e.CAP, d='down', botlabel='0.1$\mu$F')
d.add(e.LINE, to=V1.start)
d.add(e.GND)
d.draw()
d.save("example.svg")

我怀疑需要更多的 WebView 实例设置才能使其工作类似于我测试过的浏览器,但我不知道如何在此处继续。

【问题讨论】:

    标签: python pygtk webkitgtk


    【解决方案1】:

    我在我的笔记本电脑 (Ubuntu 19.10) 上试用了您的代码,并且成功了。不过,我不得不更改一些东西(Ubuntu 19.10 具有更新版本的gir-webkitgtk,并且我另外将 SVG 保存到一个文件并通过 URL 打开它)。

    这是我的代码,包括修改:

    #!/usr/bin/env python
    
    import SchemDraw as schem
    import SchemDraw.elements as e
    
    d = schem.Drawing()
    V1 = d.add(e.SOURCE_V, label='10V')
    d.add(e.RES, d='right', label='100K$\Omega$')
    d.add(e.CAP, d='down', botlabel='0.1$\mu$F')
    d.add(e.LINE, to=V1.start)
    d.add(e.GND)
    d.draw()
    d.save("example.svg")
    

    我注意到“example.svg”没有被自动保存。因此,一旦打开带有电路的窗口,我就使用菜单手动将其保存到 SVG 文件中。

    #!/usr/bin/env python
    
    import pgi as gi
    
    gi.install_as_gi()
    gi.require_version('Gtk', '3.0')
    gi.require_version('WebKit2', '4.0')
    from gi.repository import Gtk
    from gi.repository import Gdk
    from gi.repository import WebKit2
    print ("PyGtk v%s" % gi.__version__)
    
    # Test webkit SVG rendering
    url = 'http://127.0.0.1:8001/example.svg'
    window = Gtk.Window(title="Hello World")
    webview1 = WebKit2.WebView()
    webview1.load_uri(url)
    window.add(webview1)
    window.show_all()
    window.connect("destroy", Gtk.main_quit)
    Gtk.main()
    

    截图:

    在我看来,SVG 渲染得很好(我没有注意到缺少任何元素)。

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 1970-01-01
      • 2014-01-30
      • 2020-01-25
      • 2022-10-04
      • 1970-01-01
      • 2015-09-26
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多