python - 动态调整 Tkinter Canvas 文本

标签 python tkinter

我说的是 python Tkinter 特有的,我有文本和内联按钮,我使用的是像素坐标。现在我的文本字符串正在动态变化,但如果文本字符串很长就会溢出。

所以我想有什么办法可以根据文本长度更改坐标

例如:

canvas.create_text(20, 30, anchor=W, font="Purisa",
    text="Most relationships seem so transitory")

如果我用这样的东西

canvas.create_text(20+len(text), 30, anchor=W, font="Purisa",
    text="Most relationships seem so transitory")

我是 tkinter 的新手,得到了一个非常紧凑的调试代码,所以我不能一开始就动态地改变它

最佳答案

您可以根据文本的大小计算坐标,但是您需要找出给定字体中文本的大小(以像素为单位)。这可以在 Tkinter 中通过首先使用草稿 Canvas 和 bbox 方法来完成。创建文本项并捕获 id,然后使用 bbox 方法获取其大小。

scratch = Canvas()
id = scratch.create_text((0, 0), text=text, <options>)
size = scratch.bbox(id)
# size is a tuple: (x1, y1, x2, y2)
# since x1 and y1 will be 0, x2 and y2 give the string width and height

然后您可以根据结果计算出您的 x 和 y 坐标,并将其绘制在您的实际 Canvas 上。可能还有更有效的方法来执行此操作,但我还不知道。

或者您可能只想根据文本大小更改 x 位置,换句话说,使其右对齐。在 Tkinter 中,这最容易通过使用“anchor=E”选项并为 x 坐标提供文本区域的右边缘来完成:

canvas.create_text(ButtonX - 10, 30, anchor=E, ...)

例如,除了 anchor 和任何其他选项之外,您还可以使用“width=200”将文本包装在一个 200 像素宽的框中。

关于python - 动态调整 Tkinter Canvas 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800860/

相关文章:

python - Django Rest Framework 在序列化程序中获取用户

python - 将 mark_line 分层到交互式线图上会显着降低 Altair 的性能

python - 如何在 stackoverflow 上测试 Django 问题的答案

python - 我需要帮助将 Python 3.4.3 中的整数更改为单词

python - 如何将 Tkinter 小部件放置在固定窗口中的给定坐标处?

python - 从函数返回值并插入到 Entry 小部件

python - 为什么 "**"绑定(bind)比否定更紧密?

python - Tkinter ttk 背景样式的自定义未显示

python - tkinter 'NoneType' 对象没有属性 'pack'(仍然有效?)

python - tkinter 中的冒泡排序可视化