2016-10-22 44 views
4

我正在移植使用Pango將文本繪製到開羅表面的Python2腳本。使用舊的PyGtk API和pangocairo包可以很好地工作。我的系統(Debian Jesse)沒有用於PyGtk的Python3包,而是使用了新的Gtk +庫和PyGObject API。使用PangoCairo與PyGObject API

我想創建一個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.Layout對象中檢索到Pango上下文(現在爲Pango.Context)。這裏是一個可行的解決方案:「在攀高上下文(現在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

這不是您的解決方案工作原因。 「pctx = PangoCairo.create_context(ctx)」將以同樣的方式工作。您更改了設置抗鋸齒的代碼。 – beroal