如何为文本小部件设置字符的最大宽度?

3
我注意到 Tkinter Text 组件的宽度参数是以字符为单位的。
那么,是否可以为文本部件设置一个最大的字符宽度呢?

你的问题不够清晰。你是想防止用户调整包含文本小部件的窗口大小吗?还是希望小部件内的文本被限制在某个特定的大小范围内? - Bryan Oakley
我希望小部件内的文本被限制在特定的大小范围内,比如说80个字符宽。 - rectangletangle
3个回答

3
你想要做的事情并不是这个小部件直接支持的。你可以使用一些技巧来接近实现目标。例如,您可以设置wrap属性以在单词或字符边界处换行,然后确保小部件永远不会超过80个字符的宽度(这需要适当使用pack/grid/place选项)。
对于固定宽度字体,这种技术可以很好地工作,但对于可变宽度字体,它并不总是在80个字符处换行。这是因为当您将宽度设置为80个字符时,实际上它是基于平均字符宽度的80倍(具体而言,是0(零)字符,上次我检查过)。
当然,您可以始终通过监视文本插入和删除并自行处理换行来强制其在80个字符处换行,但这通常比值得付出的努力更费力。

1

您可以通过绑定 KeyKeyPressKeyRelease 事件来实现此功能。但我见过的每个实现都不太可靠。如果您可以使用 Entry 小部件代替 Text 小部件,可以查看 验证输入小部件

使用起来非常简单(为了简洁起见,我没有包括 ValidatingEntryMaxLengthEntry 类):

from Tkinter import *

root = Tk()
entry = MaxLengthEntry(root, maxlength=10)
entry.pack(side=LEFT)
root.mainloop()

0

这个问题对我来说有点不清楚。

如果您想设置文本框的宽度。那么您可以在实例化Text类时设置宽度。默认情况下,宽度以字符为单位。实际像素宽度由文本小部件的默认字体确定。请注意,超出框的限制的字符将导致文本在满足每个字符宽度后向右“翻页”。

chars = 5 # 5 characters wide
Text(parent, width = chars, font = ('Helvetica, 24'))
# change the font family and size to get different sized text boxes

在创建后,您还可以重新定义文本小部件的宽度:

textWidget.configure(width = 5)

如果你想限制文本小部件的输入,我在另一个帖子中写了一个解决方案。

在这里阅读我的回复

如何通过阻止输入的最新字符来限制Python中Tkinter文本小部件的长度?

正如评论中所述,还有其他小部件也可以处理此任务。其中之一是输入小部件。

如果这对你有用,请点赞。如果您对我如何更清晰地传达有意见,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接