【问题标题】:How to know the pixel size of a specific text on turtle graphics in python?如何知道python中海龟图形上特定文本的像素大小?
【发布时间】:2018-01-13 00:17:18
【问题描述】:

作为标题,当我执行以下代码时


import turtle
turtle.write("some text")

我想知道海龟图形画布上字符串some text的整体大小(包括高度和宽度)。
我该怎么做?

【问题讨论】:

  • 我认为这是不可能的。 turtle 是一个玩具模块,功能非常有限。

标签: python python-3.x turtle-graphics


【解决方案1】:

turtle.write 的默认字体是“Arial”,字体大小为 8px,如文档 https://docs.python.org/3/library/turtle.html#turtle.write 中所述。

文本的高度和宽度取决于font 参数。

【讨论】:

【解决方案2】:

虽然布兰登几乎给出了答案,但让我举个例子:

>>>>import turtle
>>>>turtle.write('hey hello this is DSP',font=('consolas',8,'bold'))

这可以完成你的工作,Consolas 是字体类型,8 是字体大小,粗体是字体类型。除了粗体,你也可以选择斜体或普通。

【讨论】:

    【解决方案3】:

    字体大小只告诉你一半你需要知道的,即高度:

    字体的大小通常被认为是与顶部的距离 从最高字符到最低字符的底部。

    来自FontSize.html

    但是我们可以通过将turtle.write()move=选项设置为True来获得宽度。这是一个示例,我想在我刚刚绘制的文本周围画一个框:

    from turtle import Turtle, Screen
    from tkinter.font import Font
    
    TEXT = "Penny for your thoughts"  # arbitrary text
    POSITION = (150, 150)  # arbitrary position
    
    FONT_SIZE = 36  # arbitrary font size
    FONT = ('Arial', FONT_SIZE, 'normal')  # arbitrary font
    
    X, Y = 0, 1
    
    def box(turtle, lower_left, upper_right):
        """ Draw a box but clean up after ourselves """
    
        position = turtle.position()
        isdown = turtle.isdown()
    
        if isdown:
            turtle.penup()
    
        turtle.goto(lower_left)
        turtle.pendown()
        turtle.goto(upper_right[X], lower_left[Y])
        turtle.goto(upper_right)
        turtle.goto(lower_left[X], upper_right[Y])
        turtle.goto(lower_left)
    
        turtle.penup()
        turtle.setposition(position)
    
        if isdown:
            turtle.pendown()
    
    screen = Screen()
    
    marker = Turtle(visible=False)
    marker.penup()
    marker.goto(POSITION)
    
    start = marker.position()
    marker.write(TEXT, align='center', move=True, font=FONT)
    end = marker.position()
    
    font_config = Font(font=FONT)
    font_ascent = font_config.metrics('ascent')
    buffer = (font_config.metrics('linespace') - font_ascent) / 2
    
    # Since it's centered, the end[X] - start[X] represents 1/2 the width
    box(marker, (2 * start[X] - end[X], start[Y] - buffer), (end[X], start[Y] + font_ascent + buffer))
    
    screen.exitonclick()
    

    现在,这是一个先绘制框,填充它,然后将文本绘制到其中的示例:

    from turtle import Turtle, Screen
    from tkinter.font import Font
    
    TEXT = "Penny for your thoughts"  # arbitrary text
    POSITION = (150, 150)  # arbitrary position
    
    FONT_SIZE = 36  # arbitrary font size
    FONT = ('Arial', FONT_SIZE, 'normal')  # arbitrary font
    
    X, Y = 0, 1
    
    # def box(turtle, lower_left, upper_right):
    #     """ same as above example """
    def box(turtle, lower_left, upper_right):
        """ Draw a box but clean up after ourselves """
    
        position = turtle.position()
        isdown = turtle.isdown()
    
        if isdown:
            turtle.penup()
    
        turtle.goto(lower_left)
        turtle.pendown()
        turtle.goto(upper_right[X], lower_left[Y])
        turtle.goto(upper_right)
        turtle.goto(lower_left[X], upper_right[Y])
        turtle.goto(lower_left)
    
        turtle.penup()
        turtle.setposition(position)
    
        if isdown:
            turtle.pendown()
    
    screen = Screen()
    
    font_config = Font(font=FONT)
    font_ascent = font_config.metrics('ascent')
    buffer = (font_config.metrics('linespace') - font_ascent) / 2
    text_width = font_config.measure(TEXT)
    
    marker = Turtle(visible=False)
    marker.penup()
    marker.fillcolor('pink')
    marker.goto(POSITION)
    
    # Since it's centered, we need to work with half widths
    half_width = text_width / 2
    marker.begin_fill()
    box(marker, (POSITION[X] - half_width, POSITION[Y] - buffer), (POSITION[X] + half_width, POSITION[Y] + font_ascent + buffer))
    marker.end_fill()
    
    marker.write(TEXT, align='center', font=FONT)
    
    screen.exitonclick()
    

    【讨论】:

    • 哇,你所做的就是我的最终目标。非常感谢。我想使用海龟图形来布局文本,如乳胶。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 2018-05-30
    相关资源
    最近更新 更多