Компоновка элементов ввода в формах

komponovka elementov vvoda v formah Экскурсия по tkinter, часть 1

Как уже отмечалось, виджеты Entry часто применяются в качестве полей ввода при реализации форм. Мы часто будем создавать такие формы в этой книге. Простую иллюстрацию такого применения дает пример 8.18, в котором несколько меток, полей ввода и фреймов объединены в форму для ввода нескольких значений, изображенную на рис. 8.23.

Пример 8.18. PP4E\Gui\Tour\entry2.py

непосредственное использование виджетов Entry и размещение их по рядам с метками фиксированной ширины: такой способ компоновки, а также использование менеджера grid обеспечивают наилучшее представление для форм

from tkinter import *

from quitter import Quitter

fields = ‘Name’, ‘Job’, ‘Pay’

def fetch(entries):

for entry in entries:

print(‘Input => “%s”’ % entry.get()) # извлечь текст

def makeform(root, fields):

entries = []

for field in fields:

row = Frame(root) # создать новый ряд

lab = Label(row, width=5, text=field) # добавить метку, поле ввода

ent = Entry(row)

row.pack(side=TOP, fill=X) # прикрепить к верхнему краю

lab.pack(side=LEFT)

ent.pack(side=RIGHT, expand=YES, fill=X) # растянуть по горизонтали entries.append(ent)

return entries

if __name__ == ‘__main__’:

root = Tk()

ents = makeform(root, fields)

root.bind(‘<Return>’, (lambda event: fetch(ents)))

Button(root, text=’Fetch’,

command = (lambda: fetch(ents))).pack(side=LEFT)

Quitter(root).pack(side=RIGHT)

root.mainloop()

Рис. 8.23. Внешний вид форм entry2 entry3)

 

Полями ввода здесь служат простые виджеты Entry. Сценарий создает список виджетов, с помощью которого потом будут извлекаться их значения. При каждом нажатии кнопки Fetch текущие значения извлекаются из всех полей ввода и выводятся в стандартный поток вывода:

C:\\PP4E\Gui\Tour> python entry2.py

Input => “Bob”

Input => “Technical Writer”

Input => Jack

Тот же результат дает нажатие клавиши Enter, когда окно обладает фокусом ввода, — на этот раз событие привязано к корневому окну в целом, а не к отдельному полю ввода.

Искусство создания структуры формы состоит в основном в организации иерархии виджетов. В данном сценарии каждый ряд метка/поле ввода конструируется как новый фрейм Frame, прикрепляемый к текущему краю TOP окна. Метки прикрепляются к левому краю ряда (LEFT), а поля — к правому (RIGHT). Поскольку каждый ряд представляет собой отдельный фрейм, его содержимое изолируется от других операций компоновки, производимых в этом окне. Кроме того, этот сценарий разрешает увеличение горизонтального размера при изменении размеров окна только для полей ввода, как показано на рис. 8.24.

Рис. 8.24. Возможность растягивания полей ввода в сценариях entry2 entry3) в действии

 

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий