将 PangoCairo 与 PyGObject 结合使用 API
Using PangoCairo with PyGObject API
我正在移植一个 Python2 脚本,该脚本使用 Pango 将文本绘制到 Cairo 表面。使用带有 pangocairo
包的旧 PyGtk API 效果很好。我的系统 (Debian Jesse) 没有 Python3 PyGtk 包,而是使用更新的 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 一起使用的良好文档?
图书馆似乎重新整理了一下。现在从 Pango.Layout
对象中检索 Pango 上下文(现在 Pango.Context
)。这是一个可行的解决方案:
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)
我正在移植一个 Python2 脚本,该脚本使用 Pango 将文本绘制到 Cairo 表面。使用带有 pangocairo
包的旧 PyGtk API 效果很好。我的系统 (Debian Jesse) 没有 Python3 PyGtk 包,而是使用更新的 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 一起使用的良好文档?
图书馆似乎重新整理了一下。现在从 Pango.Layout
对象中检索 Pango 上下文(现在 Pango.Context
)。这是一个可行的解决方案:
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)