2016-10-22 23 views
4

카이로 표면에 텍스트를 그리는 데 Pango를 사용하는 Python2 스크립트를 이식합니다. pangocairo 패키지가있는 이전 PyGtk API를 사용하면 문제없이 작동합니다. 내 시스템 (Debian Jesse)은 PyGtk 용 Python3 패키지를 가지고 있지 않으며 PyGObject API와 함께 새로운 Gtk + 라이브러리를 사용합니다.PyGObject API와 함께 PangoCairo 사용

pangocairo.CairoContext 개체를 만들고 싶지만 새 API에서 누락 된 것 같습니다. PangoCairo 패키지는 create_context() 기능을 가지고 있지만 필요한 방법이없는 PangoContext 개체를 생성합니다.

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) 

사람이에 대한 해결책이 있습니까 : 작동

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 코드 :

지금까지 나는이 있나요? PangoCairo을 새 API와 함께 사용해야하는 방법에 대한 좋은 문서가 있습니까?

답변

4

라이브러리가 약간 재 배열 된 것처럼 보입니다. 이제 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) 
+0

"이제 Pango 컨텍스트 (현재 Pango.Context)는 Pango.Layout 개체에서 검색됩니다." 이것이 솔루션이 작동하는 이유는 아닙니다. "pctx = PangoCairo.create_context (ctx)"는 같은 방식으로 작동합니다. 앤티 앨리어싱을 설정하는 코드를 변경했습니다. – beroal