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

时间:2011-05-30 09:18:47

标签: python text fonts width tkinter

我注意到Tkinter Text小部件的width参数是字符。

是否可以为文本小部件设置字符的最大宽度?

3 个答案:

答案 0 :(得分:2)

小部件不直接支持您想要做的事情。你可以通过一些技巧几乎到达那里。例如,您可以将wrap属性设置为在单词或字符边界处换行,然后确保窗口小部件永远不会超过80个字符(这需要适当地使用pack / grid / place选项)。

此技术适用于固定宽度字体,但对于可变宽度字体,它不会始终换行为80个字符。这是因为当你将宽度设置为80个字符时,它实际上是根据平均字符宽度的80倍(特别是上次检查时的0(零)字符)将其设置为特定的像素宽度。

当然,您可以通过监视文本插入和删除以及自己处理包装来强制它以80个字符包装,但这通常比值得付出更多的工作。

答案 1 :(得分:1)

您可以通过绑定KeyKeyPressKeyRelease事件来执行此操作。但是我所看到的每一个实现都是不稳定的。如果您可以使用Entry窗口小部件而不是Text窗口小部件,请查看Validating Entry Widget

看起来非常简单易用(为简洁起见,我不包括ValidatingEntryMaxLengthEntry类:

from Tkinter import *

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

答案 2 :(得分: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

您还可以在创建后重新定义 Text Widgets 的宽度:

textWidget.configure(width = 5)

如果您想限制文本小部件的输入。我为此在另一个线程上写了一个解决方案。

在这里阅读我的回复

how do you restrict the length of a tkinter text widget in python by blocking the latest character entered?

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

如果这对您有用,请投票。如果您对我如何更清晰地沟通有任何意见,我将不胜感激。