首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >某些SVG元素无法在python webkitgtk应用程序中呈现

某些SVG元素无法在python webkitgtk应用程序中呈现
EN

Stack Overflow用户
提问于 2019-06-13 21:10:45
回答 1查看 148关注 0票数 0

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

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

gtk程序:

代码语言:javascript
复制
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网站上的示例):

代码语言:javascript
复制
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实例才能使其与我测试过的浏览器的工作方式类似,但我不确定如何继续。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-28 06:32:02

我在我的笔记本电脑(Ubuntu 19.10)上试用了你的代码,它工作了。我不得不改变一些东西(Ubuntu19.10提供了一个更新的gir-webkitgtk版本,另外我还把它保存到一个文件中,然后通过一个网址打开它)。

下面是我的代码,其中包含了一些修改:

代码语言:javascript
复制
#!/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文件中。

代码语言:javascript
复制
#!/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呈现得很好(我没有注意到任何元素丢失)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56581294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档