Стандартные (типичные) диалоги

standartnye tipichnye dialogi Экскурсия по tkinter, часть 1

Вызовы стандартных диалогов проще, поэтому начнем с них. В составе библиотеки tkinter поставляется набор готовых диалогов, реализующих многие из наиболее часто встречающихся окон, генерируемых программами, — диалоги выбора файла, диалоги с сообщениями об ошибках и предупреждениями и диалоги, позволяющие запросить ввод данных. Они называются стандартными диалогами, поскольку входят в состав библиотеки tkinter и используют библиотечные вызовы для конкретных платформ, чтобы принять вид, свойственный данной платформе. Например, диалог открытия файла в библиотеке tkinter выглядит как любой другой подобный диалог в Windows.

Все стандартные диалоги являются модальными (они не возвращают управление, пока пользователь не закроет диалог) и блокируют главное окно программы. Сценарии могут настраивать окна этих диалогов, передавая текст сообщения, заголовки и тому подобное. Они очень просты в использовании, поэтому сразу перейдем к примеру 8.6 (который хранится в файле с расширением .pyw, чтобы подавить вывод окна консоли в Windows при запуске сценария щелчком мыши):

Пример 8.6. PP4E\Gui\Tour\dlg1.pyw

from tkinter import *

from tkinter.messagebox import *

def callback():

if askyesno(‘Verify’, ‘Do you really want to quit?’): showwarning(‘Yes’, ‘Quit not yet implemented’) else:

showinfo(‘No’, ‘Quit has been cancelled’)

errmsg = ‘Sorry, no Spam allowed!’

Button(text=’Quit’, command=callback).pack(fill=X)

Button(text=’Spam’, command=(lambda: showerror(‘Spam’, errmsg))).pack(fill=X) mainloop()

Анонимная lambda-функция использована здесь в качестве оболочки вызова showerror, для передачи двух жестко определенных аргументов (напомню, что обработчики событий не получают аргументов от самой библиотеки tkinter). Если запустить этот сценарий, он создаст главное окно, изображенное на рис. 8.5.

Нажатие кнопки Quit в этом окне выводит диалог (рис. 8.6) — вызовом стандартной функции askyesno из модуля messagebox, входящего в состав пакета tkinter. В Unix и Macintosh этот диалог выглядит иначе, а в Windows выглядит, как показано на рисунке (на практике внешний вид диалога зависит от версии и настроек Windows — в моей системе Window 7 с настройками по умолчанию он выглядит несколько иначе, чем в Windows XP, как было показано в предыдущем издании).

Рис. 8.5. Главное окно dlg1: кнопки вызывают появление дополнительных окон

 

Диалог на рис. 8.6 блокирует программу, пока пользователь не щелкнет по одной из кнопок — при выборе кнопки Yes (или нажатии клавиши Enter) вызов диалога возвращает значение True, и сценарий выводит стандартный диалог showwarning (рис. 8.7), вызывая функцию showwarning.

Рис. 8.6. Диалог askyesno, выводимый сценарием dlg1 Windows 7)

 

 

Рис. 8.7. Диалог showwarning, выводимый сценарием dlg1

 

В диалоге на рис. 8.7 пользователь может только нажать кнопку OK. Если щелкнуть на кнопке No в диалоге на рис. 8.6, вызов showinfo создаст соответствующее окно диалога (рис. 8.8). Наконец, если в главном окне щелкнуть по кнопке Spam, то с помощью стандартного вызова showerror будет создан стандартный диалог showerror (рис. 8.9).

Рис. 8.8. Диалог showinfo, выводимый сценарием dlg1

 

 

Рис. 8.9. Диалог showerror, выводимый сценарием dlg1

 

Конечно, в результате создается множество всплывающих окон, и не следует злоупотреблять этими диалогами (обычно лучше применять окна с полями ввода, остающиеся на экране длительное время, а не отвлекать пользователя всплывающими окнами). Но в нужных случаях такие всплывающие диалоги сокращают время разработки и обеспечивают привычный внешний вид.

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

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