如何在 pycairo w/o 上下文管理器中保存 svg

How to save svg in pycairo w/o context manager

我有一个 test.py 脚本,我只是这样使用的:

>>> import test
>>>

里面 test.py:

import cairo


sfc = cairo.SVGSurface("test.svg", 720, 720)
ctx = cairo.Context(sfc)
ctx.set_source_rgb(.5, .5, 1)
ctx.arc(360, 360, 300, 0, 6.28)
ctx.fill()

在控制台中 Ctrl+D 之前,我没有 svg 输出。

使用上下文管理器 (with cairo.SVGSurface("test.svg", 720, 720) as sfc:) 在导入模块后立即生成 svg 文件。但是,在我的(更大的)项目中,我在构造函数中声明了表面,并且绘图是在方法中绘制的……所以我不能使用上下文管理器。

如何“关闭”表面?

每个 the documentation 你调用 surface.finish() 然后 surface.flush()

import cairo


sfc = cairo.SVGSurface("test.svg", 720, 720)
ctx = cairo.Context(sfc)
ctx.set_source_rgb(.5, .5, 1)
ctx.arc(360, 360, 300, 0, 6.28)
ctx.fill()
sfc.finish()
sfc.flush()