Виджет Entry служит простым полем ввода одной строки текста. Обычно он используется для реализации полей ввода в диалогах, имеющих вид форм, и всюду, где пользователь должен ввести значение в поле. Виджет Entry также поддерживает более сложные понятия, такие как прокрутка, привязка клавиш для редактирования и выделение текста, при этом он очень прост в использовании. Сценарий в примере 8.17 создает окно для ввода, изображенное на рис. 8.22.
Пример 8.17. PP4E\Gui\tour\entry1.py
from tkinter import *
from quitter import Quitter
def fetch():
print(‘Input => “%s”’ % ent.get())
root = Tk()
ent = Entry(root)
ent.insert(0, ‘Type words here’)
ent.pack(side=TOP, fill=X)
ent.focus() # избавить от необходимости
# выполнять щелчок мышью
ent.bind(‘<Return>’, (lambda event: fetch())) # по нажатию клавиши Enter btn = Button(root, text=’Fetch’, command=fetch) # и по щелчку на кнопке btn.pack(side=LEFT)
Quitter(root).pack(side=RIGHT) root.mainloop()
Рис. 8.22. Сценарий entry1 в действии
Если запустить сценарий entry1, он заполнит поле ввода в этом интерфейсе текстом «Type words here» вызовом метода insert виджета. Поскольку щелчок на кнопке Fetch и нажатие клавиши Enter запускают в сценарии функцию обратного вызова fetch, оба эти события извлекут из поля ввода текущий текст с помощью метода get виджета и выведут его:
C:\…\PP4E\Gui\Tour> python entry1.py
Input => “Type words here”
Input => “Have a cigar”
Мы уже встречались выше с событием <Return>, когда знакомились с методом bind — в отличие от событий нажатий на кнопки, эти низкоуровневые обработчики получают в качестве аргумента объект события, поэтому, чтобы игнорировать его, в сценарии использовано обертывающее lambda-выражение. Кроме того, поле ввода в этом сценарии компонуется с параметром fill=X, чтобы оно растягивалось по горизонтали вместе с окном (попробуйте сами), и вызывается метод focus виджета, чтобы автоматически передать фокус в поле ввода при появлении окна. Благодаря передаче фокуса вручную пользователю не нужно щелкать на поле, чтобы начать ввод данных. Наша умная кнопка Quit, которую мы реализовали ранее, также прикрепляется к интерфейсу (она выводит диалог с просьбой подтвердить завершение приложения).
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011