Пока мы научились только выводить текст в метках и попутно познакомились с базовыми понятиями tkinter. Метки хороши для обучения основам, но от пользовательских интерфейсов обычно требуется нечто большее — способность реагировать на действия пользователя. Эту способность демонстрирует программа из примера 7.10, которая создает окно, изображенное на рис. 7.5.
Пример 7-10. PP4E\Gui\Intro\gui2.py
import sys
from tkinter import *
widget = Button(None, text=’Hello widget world’, command=sys.exit) widget.pack() widget.mainloop()
Рис. 7.5. Кнопка вверху
Здесь мы создаем вместо метки экземпляр класса Button. Как и прежде, он прикрепляется по умолчанию к верхнему краю TOP окна верхнего уровня. Но главное, на что нужно обратить внимание, это аргументы с параметрами кнопки: в качестве значения параметра с именем command используется функция sys.exit.
В кнопках параметр command определяет функцию обратного вызова, которая должна вызываться в дальнейшем при нажатии кнопки. Фактически с помощью параметра command регистрируется действие, которое должна вызвать библиотека tkinter, когда в виджете произойдет событие. Функция обратного вызова, использованная здесь, не представляет большого интереса: как мы узнали в главе 5, встроенная функция sys. exit просто прекращает выполнение вызвавшей ее программы. В данном случае это означает, что при нажатии на эту кнопку окно исчезнет. Так же как и в случае с метками, есть разные способы создания кнопок. Пример 7.11 является версией, в которой кнопка размещается в интерфейсе немедленно, без сохранения ссылки на нее в переменной. Она явно прикрепляется к левому краю родительского окна, и в качестве обработчика для нее определяется root.quit — стандартный метод объекта Tk, закрывающий главное окно и тем самым завершающий программу. В действительности метод quit завершает выполнение функции mainloop цикла событий и всей программы в целом — когда мы начнем использовать сразу несколько окон верхнего уровня в главе 8, мы
узнаем, что метод quit обычно закрывает все окна, а родственный ему метод destroy закрывает только одно окно.
Пример 7.11. PP4E\Gui\Intro\gui2b.py
from tkinter import *
root = Tk()
Button(root, text=’press’, command=root.quit).pack(side=LEFT) root.mainloop()
Эта версия создает окно, изображенное на рис. 7.6. Мы не потребовали от кнопки, чтобы она автоматически изменяла свои размеры и занимала все свободное пространство, — она этого и не делает.
Рис. 7.6. Кнопка слева
В двух последних примерах нажатие на кнопку завершает выполнение программы. В более старых сценариях, использующих tkinter, иногда можно увидеть, как параметру command присваивается строка exit, что также вызывает закрытие окна при нажатии на кнопку. В этом случае используется инструмент, имеющийся в библиотеке Tk, но такой прием менее характерен для Python, чем sys.exit или root.quit.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011