我知道Stackoverflow可以为代码提供帮助,但我想我还是会问。
我从帖子here中发现,可以将.svg文件放入tkinter窗口中,但是经过几天的搜索,我仍然找不到可以安装cairo的任何地方和rsvg来自。
我目前正在将Windows 10与python 3.6配合使用。
谢谢。
答案 0 :(得分:1)
编辑:好的,所以pip无法安装pycairo。发现了。 其他选择也对我没有用。我即将成为 远离我的计算机,但我会为您提供一些我发现的东西。
This This 和
This对不起,我没有更多帮助。希望你能弄清楚!
首先,使用pip install pycairo
不幸的是,rsvg在Windows上不可用,但是cairographics.org有一个简单的包装器。
将以下内容作为rsvg.py保存在脚本的同一文件夹中:
#some code to give rsvg.render_cairo(ctx) ability
#on windows.
import os
try:
import rsvg
WINDOWS=False
except ImportError:
print"Warning, could not import 'rsvg'"
if os.name == 'nt':
print "Detected windows, creating rsvg."
#some workarounds for windows
from ctypes import *
l=CDLL('librsvg-2-2.dll')
g=CDLL('libgobject-2.0-0.dll')
g.g_type_init()
class rsvgHandle():
class RsvgDimensionData(Structure):
_fields_ = [("width", c_int),
("height", c_int),
("em",c_double),
("ex",c_double)]
class PycairoContext(Structure):
_fields_ = [("PyObject_HEAD", c_byte * object.__basicsize__),
("ctx", c_void_p),
("base", c_void_p)]
def __init__(self, path):
self.path = path
error = ''
self.handle = l.rsvg_handle_new_from_file(self.path,error)
def get_dimension_data(self):
svgDim = self.RsvgDimensionData()
l.rsvg_handle_get_dimensions(self.handle,byref(svgDim))
return (svgDim.width,svgDim.height)
def render_cairo(self, ctx):
ctx.save()
z = self.PycairoContext.from_address(id(ctx))
l.rsvg_handle_render_cairo(self.handle, z.ctx)
ctx.restore()
class rsvgClass():
def Handle(self,file):
return rsvgHandle(file)
在脚本中执行from rsvg import *
,然后在需要使用它时运行:
rC = rsvgClass()
h = rC.Handle("YOUR-FILE-HERE.svg")
s = cairo.ImageSurface(cairo.FORMAT_ARGB32, 100, 100)
ctx = cairo.Context(s)
h.render_cairo(ctx)