首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“显示”Pango布局后需要“笔画”?

在“显示”Pango布局后需要“笔画”?
EN

Stack Overflow用户
提问于 2020-06-15 02:20:31
回答 1查看 101关注 0票数 0

我一直在追踪PyCairo和PangoCairo之间的问题。下面的代码对此进行了说明:

代码语言:javascript
复制
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()调用来消除这一行。

它起作用了,但感觉不对劲。文本不需要线条描边。哪里出了问题?这个笔划真的是必需的吗?还是我又犯了一个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-16 01:22:19

尝试使用ctx.new_path()而不是ctx.stroke()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62376532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档