Виджет Entry предназначен для того, чтобы позволить пользователю видеть и изменять одну строку текста.
Если вы хотите отобразить несколько строк текста, которые можно редактировать, смотрите Раздел 24, "Виджет Текст".
Если вы хотите отобразить одну или несколько строк текста, которые не могут быть изменены пользователем, смотрите Раздел 12, "Виджет Label".
Некоторые определения:
Выделение - это выделенная область текста в виджете Entry, если таковой имеется.
Обычно выделение производится пользователем с помощью мыши, а выделенный текст копируется в системный буфер обмена. Однако Tkinter позволяет управлять тем, копируется ли выделенный текст в буфер обмена или нет. Вы также можете осуществлять выделение текста в Entry под управлением программы.
Курсор вставки показывает, куда будет вставлен новый текст. Он отображается только тогда, когда пользователь щелкает мышью в каком-либо месте виджета. Обычно он отображается в виде мигающей вертикальной линии внутри виджета. Вы можете настроить его внешний вид несколькими способами.
Позиции внутри отображаемого текста виджета задаются в виде индекса. Есть несколько способов указать индекс:
Как обычные индексы Python, начиная с 0.
Константа tk.END указывает на позицию после существующего текста.
Константа tk.INSERT указывает на текущую позицию курсора вставки.
Константа tk.ANCHOR указывает на первый символ выделения, если оно есть.
Вам может понадобиться определить, какая позиция символа в виджете соответствует заданной позиции мыши. Чтобы упростить этот процесс, можно использовать в качестве индекса строку вида '@n', где n - горизонтальное расстояние в пикселях между левым краем виджета Entry и мышью. Такой индекс будет указывать на символ в данной горизонтальной позиции мыши.
Чтобы создать новый виджет Entry в корневом окне или фрейме с именем parent:
w = tk.Entry(parent, option, ...)
Этот конструктор возвращает новый виджет Entry. Опции включают:
Таблица 17. Опции виджета Entry
bg или background |
Цвет фона в области ввода. По умолчанию - светло-серый. |
bd или borderwidth |
Ширина границы вокруг области ввода; см. Раздел 5.1, "Размеры". По умолчанию - два пикселя. |
cursor |
Курсор, используемый при наведении мыши на виджет Entry; см. раздел Раздел 5.8, "Курсоры". |
disabledbackground |
Цвет фона, который будет отображаться, когда виджет находится в состоянии tk.DISABLED. Значения опций см. в разделе bg выше. |
disabledforeground |
Цвет переднего плана, который будет отображаться, когда виджет находится в состоянии tk.DISABLED. Значения опций см. в разделе fg ниже. |
exportselection |
По умолчанию при выделении текста в виджете Entry он автоматически экспортируется в буфер обмена. Чтобы избежать этого экспорта, используйте exportselection=0. |
fg или foreground |
Цвет, используемый для отображения текста. По умолчанию - черный. |
font |
Шрифт, используемый для текста, вводимого пользователем в виджет. См. раздел Раздел 5.4, "Шрифты". |
highlightbackground |
Цвет подсветки фокуса, когда виджет не имеет фокуса. См. раздел Раздел 53, "Фокус: маршрутизация ввода с клавиатуры". |
highlightcolor |
Цвет, отображаемый в подсветке фокуса, когда виджет имеет фокус. |
highlightthickness |
Толщина выделения фокуса. |
insertbackground |
По умолчанию курсор вставки (который показывает точку в тексте, куда будет вставляться новый ввод с клавиатуры) имеет черный цвет. Чтобы получить другой цвет курсора вставки, установите insertbackground в любой цвет; см. Раздел 5.3, "Цвета". |
insertborderwidth |
По умолчанию курсор вставки представляет собой простой прямоугольник. Вы можете получить курсор с эффектом рельефа tk.RAISED (см. Раздел 5.6, "Стили рельефа"), установив insertborderwidth в значение размера 3-мерной границы. При этом убедитесь, что параметр insertwidth как минимум в два раза больше этого значения. |
insertofftime |
По умолчанию курсор вставки мигает. Вы можете задать для параметра insertofftime значение в миллисекундах, чтобы указать, сколько времени курсор вставки будет находиться в выключенном состоянии. По умолчанию это значение равно 300. Если вы используете insertofftime=0, курсор вставки не будет мигать вообще. |
insertontime |
Аналогично insertofftime, эта опция определяет, сколько времени курсор будет виден. По умолчанию 600 (миллисекунд). |
insertwidth |
По умолчанию курсор вставки имеет ширину 2 пикселя. Вы можете изменить это значение, установив insertwidth в любой размер. |
justify |
Эта опция управляет тем, как будет выравниваться текст, если он не заполняет ширину виджета. Значение может быть tk.LEFT (по умолчанию), tk.CENTER или tk.RIGHT. |
readonlybackground |
Цвет фона, который будет отображаться, когда опция state виджета имеет значение 'readonly'. |
relief |
Выделение эффектов трехмерного рельефа вокруг ввода текста. См. Раздел 5.6, "Стили рельефа". По умолчанию используется relief=tk.SUNKEN. |
selectbackground |
Цвет фона для отображения выделения текста. См. раздел Раздел 5.3, "Цвета". |
selectborderwidth |
Ширина границы вокруг выделения текста. По умолчанию - один пиксель. |
selectforeground |
Цвет переднего плана (текста) для выделения текста. |
show |
Обычно в Entry отображаются символы, которые набирает пользователь. Чтобы сделать запись "пароль", в которой каждый символ будет отображаться в виде звездочки, установите show='*'. |
state |
Используйте эту опцию для отключения виджета Entry, чтобы пользователь не мог ничего в нем набрать. Используйте state=tk.DISABLED, чтобы отключить виджет, state=tk.NORMAL, чтобы снова разрешить ввод пользователем. Ваша программа также может узнать, находится ли курсор в данный момент над виджетом, опрашивая эту опцию; она будет иметь значение tk.ACTIVE, когда мышь находится над ним. Вы также можете установить эту опцию в состояние 'readonly', что аналогично состоянию tk.DISABLED, но содержимое виджета все еще может быть выделено или скопировано. |
takefocus |
По умолчанию фокус будет перемещаться по виджетам Entry. Установите этот параметр в 0, чтобы убрать виджет из последовательности. Обсуждение фокуса см. в Раздел 53, "Фокус: маршрутизация ввода с клавиатуры". |
textvariable |
Чтобы иметь возможность получить текущий текст из виджета Entry, вы должны установить этот параметр в экземпляр класса StringVar; смотрите Раздел 52, "Управляющие переменные: значения за виджетами". Вы можете получить текст с помощью v.get() или установить его с помощью v.set(), где v - связанная управляющая переменная. |
validate |
С помощью этой опции можно настроить виджет так, чтобы его содержимое проверялось функцией проверки в определенное время. Смотрите Раздел 10.2, "Добавление проверки в виджет Entry". |
validatecommand |
Обратный вызов, который проверяет текст виджета. См. Раздел 10.2, "Добавление валидации в виджет Entry". |
width |
Размер Entry в символах. По умолчанию - 20. Для пропорциональных шрифтов физическая длина виджета будет основана на средней ширине символа, умноженной на значение параметра width. |
xscrollcommand |
Если вы ожидаете, что пользователи будут часто вводить больше текста, чем размер виджета на экране, вы можете связать виджет Entry с полосой прокрутки. Установите этот параметр в метод .set полосы прокрутки. Дополнительные сведения см. в Раздел 10.1, "Прокрутка виджета Entry". |
Методы для объектов Entry включают:
.delete(first, last=None)
Удаляет символы из виджета, начиная с символа в позиции индекса
first, до символа в позицииlast, но не включая его. Если второй аргумент опущен, удаляется только символ в позицииfirst.
.get()
Возвращает текущий текст записи в виде строки.
.icursor(index)
Устанавливает курсор вставки непосредственно перед символом с заданным
index(индексом).
.index(index)
Сдвигает содержимое Entry так, чтобы символ с заданным
index(индексом) был самым левым видимым символом. Не имеет эффекта, если текст полностью помещается внутри записи.
.insert(index, s)
Вставляет строку
sперед символом в указанныйindex(индекс).
.scan_dragto(x)
См. метод
scan_markниже.
.scan_mark(x)
Используйте эту опцию для настройки быстрого сканирования содержимого виджета
Entry, имеющего полосу прокрутки, поддерживающую горизонтальную прокрутку.
Чтобы реализовать эту функцию, привяжите событие нажатия кнопки мыши к обработчику, который вызывает
scan_mark(x), гдеx- текущая позиция мышиx. Затем привяжите событие<Motion>к обработчику, вызывающемуscan_dragto(x), гдеx- текущая позиция мышиx. Методscan_dragtoнепрерывно прокручивает содержимое виджетаEntryсо скоростью, пропорциональной расстоянию по горизонтали между положением на момент вызоваscan_markи текущим положением.
.select_adjust(index)
Этот метод используется для того, чтобы убедиться, что выделение включает символ по указанному
index(индексу). Если выделение уже включает этот символ, ничего не происходит. Если нет, то выделение расширяется с текущей позиции (если она есть) до позицииindex.
.select_clear()
Очищает выделение. Если в данный момент выделения нет, не имеет эффекта.
.select_from(index)
Устанавливает индексную позицию
tk.ANCHORна символ, выбранный поindex, и производит выбор этого символа.
.select_present()
Если есть выделение, возвращает true, иначе возвращает false.
.select_range(start, end)
Устанавливает выделение под управлением программы. Выделение текста, начиная со
startиндекса, до символа с индексомend, но не включая его. Позицияstartдолжна находиться перед позициейend.
Для выделения всего текста в виджете Entry
e, используйтеe.select_range(0, tk.END).
.select_to(index)
Выделение всего текста с позиции
tk.ANCHORдо символа, находящегося по заданномуindex(индексу), но не включая его.
.xview(index)
То же самое, что и
.xview(). Этот метод полезен при привязке виджетаEntryк горизонтальной полосе прокрутки. Смотрите Раздел 10.1, "Прокрутка виджета Entry".
.xview_moveto(f)
Помещает текст в Entry так, чтобы символ в позиции
f, относительно всего текста, располагался у левого края окна. Аргументfдолжен находиться в диапазоне [0,1], где 0 означает левый конец текста, а 1 - правый.
.xview_scroll(number, what)
Используется для горизонтальной прокрутки Entry. Аргумент
whatдолжен быть либоtk.UNITS, для прокрутки по ширине символов, либоtk.PAGES, для прокрутки по кускам размером с виджет Entry. Числоnumberположительно для прокрутки слева направо, отрицательно для прокрутки справа налево. Например, для виджета Entrye,e.xview_scroll(-1, tk.PAGES)переместит текст на одну "страницу" вправо, аe.xview_scroll(4, tk.UNITS)переместит текст на четыре символа влево.