【问题标题】:Right-aligning text in Python svgwritePython svgwrite中的右对齐文本
【发布时间】:2021-03-14 19:59:03
【问题描述】:

我正在尝试旋转文本,该部分工作正常,但我希望它是右对齐而不是左对齐。换句话说,我希望文本在我计算出的圆的周长上结束,而不是开始。这段代码画了一个圆圈,上面有 365 个刻度,每 7 天有一个较长的刻度,每个第 7 天的数字都刻在刻度标记的圆圈内。

我的代码是这样做的:

我想要的是这个:

import math
import svgwrite

radius_inner = 200
radius_width = 40
radius_outer = radius_inner + radius_width
week_line_start = 10
day_line_start = 16
line_end = 10
day_font_size=15
days = 365

dwg = svgwrite.Drawing('YearWheel.svg')

for i in range(0,days):
    angle = (math.pi*2 / days) * i
    if i % 7 == 0:
        startr = week_line_start
    else:
        startr = day_line_start
    startx = math.sin(angle) * (radius_inner + startr)
    endx   = math.sin(angle) * (radius_outer - line_end)
    starty = -math.cos(angle) * (radius_inner + startr)
    endy   = -math.cos(angle) * (radius_outer - line_end)
    print("({},{}),({},{})".format(startx,starty,endx,endy))
    dwg.add(dwg.line((startx,starty), (endx,endy), stroke=svgwrite.rgb(10, 10, 16, '%')))
    if i > 0 and i % 7 == 0:
        rot = 'rotate({},{}, {})'.format(math.degrees(angle)-90,startx,starty)
        dwg.add(dwg.text("{}".format(i), insert=(startx,starty), transform=rot, font_size='{}px'.format(day_font_size)))

dwg.save()

我尝试将 ,style="text-align:end" 添加到 text() 调用中(在 stackoverflow 的其他地方看到过),但这没有任何区别。

理想情况下,我希望数字也与线条“垂直”居中。

我最初的帖子报告说样式元素导致错误。这是由于我的代码的一个版本在svgwrite.Drawing 构造函数中包含, profile='tiny'

【问题讨论】:

标签: python svg svgwrite


【解决方案1】:

我已经修复了右对齐,并围绕中心工作:

    dwg.add( dwg.text( "{}".format(i)
                     , insert=(startx,starty)
                     , transform=rot
                     , style="text-anchor:end;baseline-shift:-33%"
                     , font_size="{}px".format(day_font_size)
                     ) )

text-anchor 是我正在寻找的样式元素,而不是 text-align

baseline-shift 大约 -33% 让我觉得它是居中的,这对我来说已经足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2012-11-16
    • 2011-09-02
    • 2014-07-23
    • 2012-06-09
    相关资源
    最近更新 更多