Для некоторых из этих готовых диалогов можно найти лучшее применение. В примере 8.7 реализована прикрепляемая кнопка Quit, которая с помощью стандартных диалогов получает подтверждение в ответ на запрос о завершении. Поскольку она реализована в виде класса, ее можно прикреплять и повторно использовать в любом приложении, где требуется кнопка Quit с запросом на подтверждение. Так как в этой кнопке использованы стандартные диалоги, она должным образом выглядит на любой платформе.
Пример 8.7. PP4E\Gui\Tour\quitter.py
кнопка Quit, которая запрашивает подтверждение на завершение;
для повторного использования достаточно прикрепить экземпляр к другому графическому интерфейсу и скомпоновать с желаемыми параметрами
from tkinter import * # импортировать классы виджетов
from tkinter.messagebox import askokcancel # импортировать стандартный диалог
class Quitter(Frame): # подкласс графич. интерфейса
def __init__(self, parent=None): # метод конструктора
Frame.__init__(self, parent)
self.pack()
widget = Button(self, text=’Quit’, command=self.quit)
widget.pack(side=LEFT, expand=YES, fill=BOTH)
def quit(self):
ans = askokcancel(‘Verify exit’, “Really quit?”) if ans: Frame.quit(self)
if __name__ == ‘__main__’: Quitter().mainloop()
Вообще этот модуль предназначен для использования в других программах, но может запускаться самостоятельно и тогда выводит кнопку, которая в нем реализована. На рис. 8.10 слева вверху показана сама кнопка Quit и диалог askokcancel запроса подтверждения, выведенный при нажатии кнопки Quit.
Рис. 8.10. Модуль Quitter с диалогом askokcancel
Если нажать кнопку OK в этом окне, модуль Quitter вызовет метод quit элемента Frame и закроет графический интерфейс, к которому прикреплена кнопка (на самом деле завершит работу функции mainloop). Но чтобы действительно оценить пользу, приносимую такими подпружиненными кнопками, рассмотрим графический интерфейс клиента, приведенный в следующем разделе.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011