【问题标题】:Is there a way to know the width of a character in turtle graphics?有没有办法知道海龟图形中字符的宽度?
【发布时间】:2022-01-22 10:44:24
【问题描述】:

我目前正在用海龟图形制作打字游戏。当用户键入时,他们正在键入的句子上方的箭头会移动。这用于向用户显示他们在句子中的位置。但是,我无法让箭头停留在用户实际所在的字母上方。似乎每个字母的宽度不是一个恒定的测量值。因此,这将不起作用:t.forward(any number here) 有没有办法知道句子中每个字母的宽度?或者是否有某种字体类型无论字符如何都具有恒定的宽度?如果这没有意义,我深表歉意。谢谢

【问题讨论】:

  • 等宽​​字体实际上被称为“固定宽度”。 Courier 在任何系统上都是不错的选择。
  • @vaizki 谢谢我的帮助
  • 它们也被称为“等宽”字体。

标签: python turtle-graphics


【解决方案1】:

您可以通过以下几种方式查看:

要知道你刚刚写的字符的宽度

您可以通过始终在写字符之前拿起笔并让乌龟随着字符移动来做到这一点。如果你在写之前和之后记录下海龟的位置,那么你就可以计算出并返回宽度:

    import turtle
    def write_character(t: turtle, char: str, font: str = "Arial") -> float:
        """Write character and return width"""
        pen_was_down = t.isdown()
        if pen_was_down:
            t.penup()
        x_start, _ = t.position()
        t.write(char, move=True, font=(font, 50, "normal"))
        x_end, _ = t.position()
        if pen_was_down:
            t.pendown()
        return x_end - x_start

这样您就可以将箭头向前移动返回的宽度。

使用固定宽度字符

正如你所发现的,有些字体没有固定的。然而,有些人这样做 - 这些被称为等宽。一个常用的例子是 Courier。下面的 sn-p 使用前面的方法来检查 Arial 和 Courier 字体的字符宽度分布:

print("Arial", Counter(
    [write_character(turtle.Turtle(), c, "Arial") for c in string.ascii_lowercase]
))
print("Courier", Counter(
    [write_character(turtle.Turtle(), c, "Courier") for c in string.ascii_lowercase]
))

哪个输出:

Arial Counter({27.0: 11, 24.0: 7, 11.0: 3, 13.0: 2, 41.0: 1, 16.0: 1, 36.0: 1})
Courier Counter({30.0: 26})

在这里我们可以看到 Arial 有 7 种不同的字符宽度,而 Courier 只有一个字符宽度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 2020-04-01
    • 1970-01-01
    • 2019-04-23
    • 2020-01-10
    • 2018-02-27
    • 2022-01-23
    • 2018-05-30
    相关资源
    最近更新 更多