2016-10-22 9 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 
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でどのように使用されるべきかに関する良い文書はありますか?

答えて

4

ライブラリが少し並べ替えられているようです。 Pangoコンテキスト(now 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

関連する問題