我一直在追踪PyCairo和PangoCairo之间的问题。下面的代码对此进行了说明:
import math
import cairo
import gi
gi.require_version('Pango', '1.0')
gi.require_version('PangoCairo', '1.0')
from gi.repository import Pango, PangoCairo
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 400, 400)
ctx = cairo.Context(surface)
# TOP LEFT CIRCLE
ctx.save()
ctx.arc(100.0, 100.0, 50, 0, 2 * math.pi)
ctx.set_source_rgba(0.0, 0.0, 1.0, 1.0)
ctx.set_line_width(2.0)
ctx.stroke()
ctx.restore()
# CENTER TEXT
ctx.save()
layout = PangoCairo.create_layout(ctx)
layout.set_font_description(Pango.font_description_from_string('Arial 10.0'))
layout.set_markup('<b>Foo Bar</b>', -1)
ctx.set_source_rgba(0.0, 1.0, 0.0, 1.0)
_, text_extents = layout.get_pixel_extents()
text_width, text_height = text_extents.width, text_extents.height
ctx.translate(200.0, 200.0)
ctx.translate(-text_width / 2, -text_height / 2)
ctx.move_to(0.0, 0.0)
PangoCairo.show_layout(ctx, layout)
# ctx.stroke() # WHY?
ctx.restore()
# BOTTOM RIGHT CIRCLE
ctx.save()
ctx.arc(300.0, 300.0, 50, 0, 2 * math.pi)
ctx.set_source_rgba(1.0, 0.0, 0.0, 1.0)
ctx.set_line_width(2.0)
ctx.stroke()
ctx.restore()
surface.write_to_png('test.png')结果如下图所示:

我的意图是画两个圆圈和文本。文本和右下角圆圈之间的线不应存在。我可以通过直接在中心文本代码块的PangoCairo.show_layout下面添加/取消注释ctx.stroke()调用来消除这一行。
它起作用了,但感觉不对劲。文本不需要线条描边。哪里出了问题?这个笔划真的是必需的吗?还是我又犯了一个错误?
发布于 2020-06-16 01:22:19
尝试使用ctx.new_path()而不是ctx.stroke()。
显示布局似乎设置了当前点,因此arc在开始时隐式执行的以下line_to实际上显示了一条线。
https://stackoverflow.com/questions/62376532
复制相似问题