gpt4 book ai didi

python - 如何知道python中 turtle 图形上特定文本的像素大小?

转载 作者:行者123 更新时间:2023-12-05 05:19:50 24 4
gpt4 key购买 nike

如题,当我执行下面的代码时


import turtle
turtle.write("some text")

我想知道 turtle graphics Canvas 上的字符串some text的整体大小(包括高度和宽度)。
我该怎么做?

最佳答案

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

The size of a font is typically taken to be the distance from the topof the highest character to the bottom of the lowest character.

来自 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()

enter image description here

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

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()

enter image description here

关于python - 如何知道python中 turtle 图形上特定文本的像素大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45517300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com