Как установить максимальную ширину в символах для виджета «Текст»? - PullRequest
2 голосов
/ 30 мая 2011

Я заметил аргумент ширины для виджета Tkinter Text в символах.

Можно ли установить максимальную ширину в символах для текстового виджета?

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

То, что вы хотите сделать, не поддерживается виджетом напрямую. Вы можете почти достичь этого, используя несколько приемов. Например, вы можете установить для атрибута wrap перенос по границам слова или символа, а затем убедиться, что виджет никогда не будет шире, чем 80 символов (для этого необходимо соответствующим образом использовать параметры pack / grid / place).

Этот метод будет хорошо работать для шрифтов фиксированной ширины, но для шрифтов переменной ширины он не всегда будет переноситься на 80 символов. Это потому, что когда вы устанавливаете ширину равной 80 символам, это на самом деле устанавливает для нее определенную ширину в пикселях, основанную на 80-кратной ширине среднего символа (в частности, символа 0 (ноль), последний раз, когда я проверял).

Конечно, вы всегда можете принудительно обернуть его в 80 символов, отслеживая вставки и удаления текста и обрабатывая перенос самостоятельно, но обычно это больше работы, чем стоит усилий.

1 голос
/ 31 мая 2011

Вы можете сделать это, связавшись с событиями Key, KeyPress или KeyRelease.Но каждая реализация этого, которую я видел, является ненадежной.Если вы можете использовать виджет Entry вместо виджета Text, взгляните на Проверяющий виджет ввода .

Кажется довольно простым в использовании (для краткости я не включаю классы ValidatingEntry и MaxLengthEntry):

from Tkinter import *

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