如何知道Python中海龟图形上特定文本的像素大小?

2023-12-23

如标题所示,当我执行以下代码时


import turtle
turtle.write("some text")

我想知道字符串的整体大小(包括高度和宽度)some text画布上的乌龟图形。
我怎样才能做到这一点?


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

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

From 字体大小.html http://reference.wolfram.com/language/ref/FontSize.html

但我们可以通过设置来获取宽度move=的选项turtle.write() to 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道Python中海龟图形上特定文本的像素大小? 的相关文章

  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 有没有办法在每个特定的时间间隔运行 python Flask 函数并在本地服务器上显示输出?

    我正在使用 Flask 工作 python 程序 我想从字典中提取键 该密钥为文本格式 但我想在每个特定的时间间隔后重复上述整个过程 并每次在本地浏览器上显示此输出 我已经使用flask apscheduler尝试过这个 程序只运行一次并显
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • PyMC3-自定义 theano Op 进行数值积分

    我使用 PyMC3 进行参数估计 使用必须定义的特定似然函数 我用谷歌搜索了一下 发现我应该使用densitydist实现用户定义的似然函数的方法 但它不起作用 如何在 PyMC3 中合并用户定义的似然函数并找出最大 aposteriori
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • 为什么 smtplib.SMTP().sendmail 不发送 DKIM 签名邮件

    我已经在服务器上设置了 postfix 以及 openDKIM 当我跑步时 echo Testing setup mail s Postfix test my email address 我收到电子邮件 邮件标题中有一个DKIM Signa
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro

随机推荐

  • Android studio 布局设计视图未加载

    我使用的是 Android Studio 3 2 1 版本 加载 xml布局 附截图 Android Studio xml 截图 Android Studio等待截图 几个月前我遇到了同样的问题 尽管在更新我的 Android Studio
  • 使用命令行参数批量执行 iPython Notebook?

    我在用着nbconvert通过命令行执行 iPython 笔记本 如这个答案 https stackoverflow com a 17913858 718139 ipython nbconvert to html ExecutePrepro
  • 使用 jQuery 从父元素中删除类?

    我不知道如何从父元素中删除类 基本上我有一个
  • 如何检测表格视图单元格中的一个按钮

    如何检测其中的一个按钮UITableviewCell 我有 10 个UIButton in UITableViewCell 接下来当我点击UIButton然后它会检测到多个按钮 如奇数列表 我的UITableView已启用分页 这是我的所有
  • 用于状态处理的多态枚举

    在 C 中 如何在不使用 switch 或 if 语句的情况下处理枚举 例如 enum Pricemethod Max Min Average 我有一篇类文章 public class Article private List
  • 如何从 FluentNHibernate 生成 hbm.xml 文件

    我正在尝试遵循这个tutorial http www dotnetguy co uk post 2009 10 19 using fluent Nhibernate to Export Create hbm files Nhibernate
  • GCC 3.4.6 中与模板函数相关的错误

    今天我在办公室遇到了一个奇怪的编译错误 我怀疑它是我们的 GCC 版本 3 4 6 中的一个错误 我已经能够将其归结为几行代码 如下 我得到的编译错误是 test cpp 26 error expected primary expressi
  • 如何在Python中解析data-uri?

    HTML 图像元素有this http www w3schools com tags tag img asp简化格式 img src something 那东西可以是data uri https www rfc editor org rfc
  • 修改Android的seekbar小部件以垂直操作

    我正在尝试让模拟器使用垂直搜索栏 但我 有点卡住了 我可以让搜索栏按照我想要的方式显示 我可以获得做我想做的事情的进度 并且我可以修改 onTouchEvent 让拇指垂直移动而不是 水平地 我不能做的就是让拇指移到外面 默认 29 水平像
  • 确定时间是否在两个时间之间,无论日期如何

    我创建了一个自定义TimePicker我对 Android Wear 表盘的偏好 用户选择一个时间 它会返回当前时间 以毫秒为单位 代码可以在我的GitHub 仓库 https github com Nxt3 IO Classic Watc
  • 自定义 Jersey 错误处理,如何在客户端捕获响应?

    我正在我的网络服务上尝试一些自定义错误处理 在我的 web 服务中 我创建了一个扩展 WebApplicationException 的自定义异常类 如中所述JAX RS Jersey如何自定义错误处理 https stackoverflo
  • 更新 Python3 pip AttributeError 时出错:模块“lib”没有属性“OpenSSL_add_all_algorithms”

    我在 python3 中安装 更新任何 pip 模块时遇到错误 清除并重新安装pip我能想到的每一个包裹都没有帮助 这是我响应运行时收到的错误python m pip install upgrade pip具体来说 但尝试安装或更新任何 p
  • .NET 的顶级缓存库

    您认为哪些缓存库对 NET 最重要或最有用 我这么问是因为我需要联系他们以了解他们计划支持 NET 4 0 的缓存框架 应用架构 http msdn microsoft com en us windowsserver ee695849 as
  • while 循环读取文件提前结束

    最终目标是让我的 bash 脚本在多个服务器上执行命令 我差不多已经设置好了 我的 SSH 身份验证工作正常 但是这个简单的 while 循环快要我的命了 当我执行 while 循环 读取文件中的主机名时 当我运行 ssh HOST una
  • 在 mac osx 中反汇编 g++ 创建的可执行文件

    如何在 Mac OSx 上查看 C 程序的可执行文件 例如 a out 的反汇编版本 这不完全是你所要求的 但是g S从源代码生成汇编 预计比反汇编版本更具可读性 如果你不能重新编译 S 例如没有源代码 那么gdb让你可以拆卸 就像objd
  • dart - 使用空安全时订阅的正确编码模式?

    我已经启用了 dart 2 8 实验性空安全性 我有以下退出代码 StreamSubscription
  • 增强 python 链接

    我正在为我的游戏添加 boost python 我为我的类编写包装器以在脚本中使用它们 问题在于将该库链接到我的应用程序 我在用着cmake构建系统 现在我有一个简单的应用程序 包含 1 个文件和 makefile PYTHON usr i
  • 如何在AWS-Glue脚本中编写用户定义函数?

    我们如何在动态框架或数据框架上使用 PySpark Python 在 AWS Glue 脚本中编写用户定义的函数 Dynamicframe 并不像 Dataframe API 支持 UDF 那样完全支持它 您将获得的最好结果是 MAP ap
  • 应用程序如何使用 Android 4+ 的 Google 离线地图?

    Android 版本 4 引入了离线地图 我可以在手机上选择要缓存的区域 然后 Google 地图会将该地图数据下载到手机上 正如我收到的评论 我想使用我的设备上已有的数据 如果用户之前已经下载了离线地图使用 并且不要打开与 Google
  • 如何知道Python中海龟图形上特定文本的像素大小?

    如标题所示 当我执行以下代码时 import turtle turtle write some text 我想知道字符串的整体大小 包括高度和宽度 some text画布上的乌龟图形 我怎样才能做到这一点 字体大小只能告诉你half您需要知