【问题标题】:Using PangoCairo with PyGObject API将 PangoCairo 与 PyGObject API 一起使用
【发布时间】:2017-03-04 19:12:47
【问题描述】:

我正在移植一个 Python2 脚本,该脚本使用 Pango 将文本绘制到开罗表面。使用带有 pangocairo 包的旧 PyGtk API 可以正常工作。我的系统(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 一起使用的好的文档?

【问题讨论】:

    标签: python pygobject pango pycairo pangocairo


    【解决方案1】:

    看起来图书馆已经重新安排了一点。现在从 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)
    

    【讨论】:

    • "现在从 Pango.Layout 对象中检索到 Pango 上下文(现在是 Pango.Context)。"这不是您的解决方案有效的原因。 "pctx = PangoCairo.create_context(ctx)" 将以相同的方式工作。您更改了设置抗锯齿的代码。
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2016-07-16
    • 2016-06-28
    • 2019-03-14
    • 2017-11-25
    相关资源
    最近更新 更多