使用PangoCairo和PyGObject API

时间:2016-10-22 16:04:11

标签: python pygobject pango pycairo pangocairo

我正在移植一个使用Pango将文本绘制到Cairo表面的Python2脚本。使用带有pangocairo包的旧PyGtk API可以正常工作。我的系统(Debian Jesse)没有PyGtk的Python3包,而是使用更新的Gtk +库和PyGObject API。

我想创建一个pangocairo.CairoContext对象,但新API中似乎缺少它。 PangoCairo包具有create_context()函数,但它生成的PangoContext对象没有我需要的方法。

到目前为止,我有这个:

import cairo
from gi.repository import Pango
from gi.repository import PangoCairo

surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, 8, 8)
ctx = cairo.Context(surf)
pctx = PangoCairo.create_context(ctx) # Creates a PangoContext
pctx.set_antialias(cairo.ANTIALIAS_SUBPIXEL) # This fails

有效的旧Python2代码:

import cairo
import pango
import pangocairo

surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, 8, 8)
ctx = cairo.Context(surf)
pctx = pangocairo.CairoContext(ctx)
pctx.set_antialias(cairo.ANTIALIAS_SUBPIXEL)

有人有解决方案吗?是否有关于PangoCairo应如何与新API一起使用的良好文档?

1 个答案:

答案 0 :(得分:4)

看起来这个库已经重新排列了一下。现在从Pango.Context对象检索Pango上下文(现在为Pango.Layout)。这是一个有效的解决方案:

import cairo
from gi.repository import Pango
from gi.repository import PangoCairo

surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, 8, 8)
ctx = cairo.Context(surf)
layout = PangoCairo.create_layout(ctx)
pctx = layout.get_context()

fo = cairo.FontOptions()
fo.set_antialias(cairo.ANTIALIAS_SUBPIXEL)
PangoCairo.context_set_font_options(pctx, fo)