【发布时间】:2018-01-13 00:17:18
【问题描述】:
作为标题,当我执行以下代码时
import turtle
turtle.write("some text")
我想知道海龟图形画布上字符串some text的整体大小(包括高度和宽度)。
我该怎么做?
【问题讨论】:
-
我认为这是不可能的。
turtle是一个玩具模块,功能非常有限。
标签: python python-3.x turtle-graphics
作为标题,当我执行以下代码时
import turtle
turtle.write("some text")
我想知道海龟图形画布上字符串some text的整体大小(包括高度和宽度)。
我该怎么做?
【问题讨论】:
turtle 是一个玩具模块,功能非常有限。
标签: python python-3.x turtle-graphics
turtle.write 的默认字体是“Arial”,字体大小为 8px,如文档 https://docs.python.org/3/library/turtle.html#turtle.write 中所述。
文本的高度和宽度取决于font 参数。
【讨论】:
len(string)*8估计宽度?
虽然布兰登几乎给出了答案,但让我举个例子:
>>>>import turtle
>>>>turtle.write('hey hello this is DSP',font=('consolas',8,'bold'))
这可以完成你的工作,Consolas 是字体类型,8 是字体大小,粗体是字体类型。除了粗体,你也可以选择斜体或普通。
【讨论】:
字体大小只告诉你一半你需要知道的,即高度:
字体的大小通常被认为是与顶部的距离 从最高字符到最低字符的底部。
但是我们可以通过将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()
【讨论】: