0

我一直在寻找 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')

结果如下图:

两个圆圈和文字

我的意图是画两个圆圈和文字。文本和右下角圆圈之间的线不存在。我可以通过在中心文本代码块的ctx.stroke()正下方添加/取消注释调用来使该行消失。PangoCairo.show_layout

它有效,但感觉不对。文本不需要线条笔划。出了什么问题?中风是真的需要还是我犯了另一个错误?

4

1 回答 1

1

尝试ctx.new_path()代替ctx.stroke().

显示布局似乎设置了当前点,因此在其开头隐式执行的以下内容line_to实际上arc显示了一条线。

于 2020-06-15T17:22:18.693 回答