Главная


10. Виджет Entry

Виджет 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 положительно для прокрутки слева направо, отрицательно для прокрутки справа налево. Например, для виджета Entry e, e.xview_scroll(-1, tk.PAGES) переместит текст на одну "страницу" вправо, а e.xview_scroll(4, tk.UNITS) переместит текст на четыре символа влево.


>> Прокрутка виджета Entry