Настало время строить интерфейсы пользователя с несколькими виджетами. Сценарий в примере 7.17 создает окно, изображенное на рис. 7.12.
Пример 7.17. PP4E\Gui\Intro\gui4.py
from tkinter import *
def greeting():
print(‘Hello stdout world!…’)
win = Frame()
win.pack()
Label(win, text=’Hello container world’).pack(side=TOP) Button(win, text=’Hello’, command=greeting).pack(side=LEFT) Button(win, text=’Quit’, command=win.quit).pack(side=RIGHT)
win.mainloop()
Рис. 7.12. Окно с несколькими виджетами
Этот сценарий создает виджет Frame (еще один класс из библиотеки tkinter), к которому прикрепляются три других виджета — Label и два Button — путем передачи объекта Frame в первом аргументе. На языке tkinter это означает, что виджет Frame становится родителем для трех других виджетов. Обе кнопки этого интерфейса вызывают следующие обработчики:
• Щелчок на кнопке Hello запускает функцию greeting, определенную внутри этого файла, которая производит вывод в поток stdout.
• Щелчок на кнопке Quit вызывает стандартный метод tkinter quit, который виджет win наследует от класса Frame (Frame.quit имеет тот же эффект, что и использованный ранее метод Tk.quit).
Ниже приводится текст, который выводится в stdout при щелчке на кнопке Hello, какими бы ни были стандартные потоки ввода-вывода для этого сценария:
C:\…\PP4E\Gui\Intro> python gui4.py
Hello stdout world!…
Hello stdout world!…
Hello stdout world!…
Hello stdout world!…
Понятие прикрепления виджетов к контейнерам оказывается в сердцевине всех структур в библиотеке tkinter. Однако прежде чем подробно вникать в эту тему, обсудим небольшую деталь.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011