我正在谈论特定于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的新手并且得到了一个非常紧凑的调试代码,因此我无法在第一时间动态更改它
答案 0 :(得分:1)
您可以根据文本大小计算坐标,但需要找出给定字体中文本的大小(以像素为单位)。这可以通过首先使用临时画布和bbox方法在Tkinter中完成。创建文本项并捕获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坐标,并将其绘制在实际画布上。可能还有一种更有效的方法,但我还不知道。
或者你可能只想根据文字大小改变x位置,换句话说,让它正确对齐。在Tkinter中,通过使用“anchor = E”选项并为x坐标给出文本区域的右边缘,可以轻松完成此操作:
canvas.create_text(ButtonX - 10, 30, anchor=E, ...)
除了锚点和任何其他选项之外,您还可以使用“width = 200”将文本换行到200像素宽的框中。
答案 1 :(得分:0)
您可以在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)
你可以根据文字大小来计算宽度或者修复它,然后如果它长于它将被包裹并且不会有任何溢出。