如何在不使用上下文管理器的情况下通过pycairo保存SVG文件
解决方法
要主动触发SVG文件写入,直接调用SVGSurface实例的finish()方法即可。这个方法会将所有待完成的绘图操作全部写入目标文件,同时释放surface关联的底层资源,无需等待Python解释器销毁对象或退出进程才生成文件。
如果你的场景下后续还需要对同一个surface执行绘制操作,只需要先写入当前内容不关闭资源,可以调用flush()方法。
示例1:修改你给出的测试代码
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() # 新增这一行,调用后立刻生成完整的svg文件 sfc.finish()
示例2:适配类使用场景
你可以在类中单独封装一个保存关闭的方法,所有绘制操作完成后主动调用即可:
import cairo class MyDrawing: def __init__(self): # 构造函数中初始化surface self.sfc = cairo.SVGSurface("test.svg", 720, 720) self.ctx = cairo.Context(self.sfc) def draw_blue_circle(self): # 类方法中执行绘制 self.ctx.set_source_rgb(.5, .5, 1) self.ctx.arc(360, 360, 300, 0, 6.28) self.ctx.fill() def save(self): # 所有绘制完成后调用该方法即可立即保存 self.sfc.finish()
调用逻辑:
>>> import test >>> drawing = MyDrawing() >>> drawing.draw_blue_circle() >>> drawing.save() # 此处调用后立即生成svg文件,无需按Ctrl+D
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

