Использование 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)
Другие вопросы по тегам