Using PangoCairo with PyGObject API



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

我想创建一个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一起使用的良好文档?

看起来库已经重新安排了一点。Pango上下文(现在是Pango.Context)现在是从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)

相关内容

  • 没有找到相关文章

最新更新