As title, when I execute the following code
import turtle
turtle.write("some text")
I want to know the whole size (including height and width) of the string some text
on the canvas of the turtle graphics.
How can I do that?
As title, when I execute the following code
import turtle
turtle.write("some text")
I want to know the whole size (including height and width) of the string some text
on the canvas of the turtle graphics.
How can I do that?
The font size only tells you half of what you need to know, i.e. the height:
The size of a font is typically taken to be the distance from the top of the highest character to the bottom of the lowest character.
From FontSize.html
But we can get the width via setting the move=
option of turtle.write()
to True
. Here's a example where I want to draw a box around the text I've just drawn:
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()
Now, here's an example that draws the box first, fills it, and then draws the text into it:
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()
The default font for turtle.write
is 'Arial' with a font-size of 8px as described in the documentation https://docs.python.org/3/library/turtle.html#turtle.write.
The height and width of the text is dependent on the font
parameter.
Though Brandon pretty much gave the answer, let me give you an example:
>>>>import turtle
>>>>turtle.write('hey hello this is DSP',font=('consolas',8,'bold'))
This would do your job, Consolas is the font type, 8 is the font's size, and bold is the font type. Other than bold you can go for italic or normal as well.