如何为文本小部件设置字符的最大宽度?
Posted
技术标签:
【中文标题】如何为文本小部件设置字符的最大宽度?【英文标题】:How to set maximum width in characters for the Text widget? 【发布时间】:2011-09-04 16:29:57 【问题描述】:我注意到 Tkinter Text 小部件的宽度参数以字符为单位。
是否可以为文本小部件设置最大字符宽度?
【问题讨论】:
您的问题不清楚。您是否要阻止用户调整包含文本小部件的窗口的大小?或者您是否希望将小部件内的文本限制为特定大小? 我希望将小部件内的文本限制为特定大小。说 80 个字符宽。 【参考方案1】:您可以通过绑定到Key
、KeyPress
或KeyRelease
事件来做到这一点。但是我见过的每一个实现都是不稳定的。如果您可以使用Entry
小部件而不是Text
小部件来解决问题,请查看Validating Entry Widget。
使用起来似乎很简单(为简洁起见,我不包括 ValidatingEntry
和 MaxLengthEntry
类):
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 小部件设置边界?