tkinter 环绕长度单位是像素?

Lut*_*her 3 python tkinter

回复:tkinter.Label 的wrapplength,来自 John Shipman 的 NM Tech 文档:“您可以通过将此选项设置为所需的数字来限制每行中的字符数。默认值 0 表示仅断行在换行符处。” 其他来源一致认为环绕长度的单位是字符。

下面的代码似乎打破了界限,就好像绕行长度的单位是像素,而不是字符。例如,如果我将 wraplength 设置为 10,标签将显示一列一两个字符宽的文本。如果我将 wraplength 设置为 20,则行的长度为 3 或 4 个字符。

在我的应用程序中,用户将为自定义表单创建自己的简单小部件,如果 wraplength 选项使用字符计数作为单位而不是它正在执行的任何操作,那就更好了。由于 NMTech 文档适用于 Tkinter 8.5,但 8.6 是我的 Python 3.5 附带的,也许这可以解释其中的差异,但我没有看到 8.6 的文档。

但理想情况下,行应在单词之间最近的间距处换行,且换行长度仅用作最大行长度。因此,如果用户无论如何都必须输入自己的 \n,则wrapplength 对我来说似乎毫无用处。

摘要:在 GUI 中,对于将为自己的简单小部件输入选项值的用户,1) 有没有办法让 Tkinter 接受换行长度单位的字符,2) 我可以让行在最近的空格处换行吗?包裹长度仅用作最大行长度,而不是绝对行长度?

感谢您提供任何解决方案或建议。

import tkinter as tk

root = tk.Tk()

sib = tk.Label(root, text='Give em hell Harry', wraplength=10)
sib.grid()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 7

有没有办法让 Tkinter 接受换行长度单位的字符

不,那里没有。如果您需要在单词边界处进行换行,您可以使用文本小部件而不是标签。

除非另有说明,否则单位均为像素。来自规范的 tk 文档

对于可以执行自动换行的小部件,此选项指定最大行长度超过此长度的行将换行到下一行,以便没有行比指定的长度长。该值可以以任何屏幕距离的标准形式指定。如果该值小于或等于 0,则不进行换行:仅在文本中的换行符处换行。

在上面的文本中,“屏幕距离的任何标准形式”是指您可以使用后缀来指定打印机点(例如:“72p”)、厘米(例如:“2.54c”)、毫米(例如:“1000m”)或英寸(例如:“1i”)