Python 动态调整Tkinter画布文本的大小

Python 动态调整Tkinter画布文本的大小,python,tkinter,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,

我说的是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的新手,需要调试的代码非常紧凑,因此我无法首先动态更改它

您可以在create_text中传递“width”以避免溢出

width=Maximum line length. Lines longer than this value are wrapped. Default is 0 (no wrapping).
所以会是这样的

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

您可以根据文本大小计算宽度或使其固定,然后如果宽度超过将被包装的长度,并且不会出现任何溢出。

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

width=Maximum line length. Lines longer than this value are wrapped. Default is 0 (no wrapping).
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

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

如果您使用类似的选项,会是什么?还有,你所说的动态大小是什么意思,字符大小?你所说的“根据文本长度更改坐标”是指在创建时还是在之后移动文本?@martineau实际上我想固定宽度,因此在文本更改时它不应该溢出,或者以某种方式使宽度随字符串长度动态扩展。DevC给出的答案有点接近。它解决了我的问题,但我仍然在寻找如何使坐标动态化