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

Posted

技术标签:

【中文标题】如何为文本小部件设置字符的最大宽度?【英文标题】:How to set maximum width in characters for the Text widget? 【发布时间】:2011-09-04 16:29:57 【问题描述】:

我注意到 Tkinter Text 小部件的宽度参数以字符为单位。

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

【问题讨论】:

您的问题不清楚。您是否要阻止用户调整包含文本小部件的窗口的大小?或者您是否希望将小部件内的文本限制为特定大小? 我希望将小部件内的文本限制为特定大小。说 80 个字符宽。 【参考方案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】:

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

这种技术适用于固定宽度的字体,但对于可变宽度的字体,它并不总是以 80 个字符换行。这是因为当您将宽度设置为 80 个字符时,它实际上是将其设置为基于平均字符宽度的 80 倍的特定像素宽度(特别是上次我检查的 0(零)字符)。

当然,您始终可以通过监视文本插入和删除并自己处理换行来强制它在 80 个字符处换行,但这通常比付出的努力多。

【讨论】:

【参考方案3】:

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

如果要设置文本框的宽度。然后,您可以在实例化 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?

如 cmets 中所述,还有其他小部件也可以处理该任务。条目小部件就是其中之一。

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

【讨论】:

以上是关于如何为文本小部件设置字符的最大宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何为可扩展的 Flutter 小部件设置动画以将其滑出屏幕

如何调整 TextField() 文本的大小以适应 Expanded() 小部件的最大宽度

Flutter:如何为 Draggable 小部件设置边界?

如何为 WordPress 插件/小部件开发设置 Netbeans 项目

如何为 StreamBuilder 生成的小部件设置动画?

如何为小部件 Flutter 添加垂直间距