Использование PangoCairo с PyGObject API
Я портирую скрипт Python2, который использует Pango для рисования текста на поверхности Каира. Он работает нормально, используя старый PyGtk API с pangocairo
пакет. Моя система (Debian Jesse) не имеет пакетов Python3 для PyGtk и вместо этого использует более новые библиотеки Gtk+ с API PyGObject.
Я хочу создать 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 ответ
Похоже, библиотека была немного переставлена. Контекст Панго (сейчас 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)