Создание диалогового окна

Диалоговые окна, как элементы графического интерфейса, предназначены для вывода сообщений пользователю, получения от него какой-либо информации, а также управления.

Создадим свое диалоговое окно. Для примера оно создается используя несколько виджетов:

from tkinter import *

window = Tk()
window.title("Message box title")
window.geometry("300x75")
label = Label(window, text="My message content!")
label.pack()
button = Button(window, text="Ok", width=10, command=window.destroy)
button.pack(side=RIGHT)
window.mainloop()
1
2
3
4
5
6
7
8
9
10

Результат выполнения:

messagebox_customize

Мы получили простейшее диалоговое окно, и хотя диалоговые окна весьма разнообразны, их вид уже устоялся. Нет необходимости создавать диалоговые окна с нуля, для это можно использовать «заготовки».

Messagebox - окно с информацией

Для информирования пользователя о процессах происходящих в ПК можно использовать messagebox - окно с информацией. При этом требуется дополнительно импортировать «подмодуль» tkinter - tkinter.messagbox, в котором описаны классы для окон данного типа.

Код созданного информационного окна может быть следующим:

from tkinter import messagebox

messagebox.showinfo('Message title', 'Message info content')
1
2
3

Результат выполнения:

messagebox_info

Для привлечения внимания можно использовать окно предупреждения:

from tkinter import messagebox

messagebox.showwarning('Message warning title', 'Message warning content') # show warning message
1
2
3

Результат выполнения:

messagebox_warning

Окно с возникшей ошибкой ПО думаю встречал каждый, на питоне его можно создать, написав следующий код:

from tkinter import messagebox

messagebox.showerror('Message error title', 'Message error content')    # show error message
1
2
3

Результат выполнения:

messagebox_error

Messagebox - окно с вопросом

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

messagebox_ask_yes_no

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

from tkinter import messagebox

response = messagebox.askquestion('Message title', 'Message ask content')
response = messagebox.askyesno('Message title', 'Message y/n content')
response = messagebox.askyesnocancel('Message title', 'Message y/n/cancel content')
response = messagebox.askokcancel('Message title', 'Message ok/cancel content')
response = messagebox.askretrycancel('Message title', 'Message retry/cancel content')
1
2
3
4
5
6
7

Упражнения

  1. Исследование: после каждого вызова диалогового окна добавьте команду print(response), которая выведет в консоль значение выбранного варианта ответа.

Окна открытия и сохранения файлов

Рассмотрим, как запрограммировать с помощью tkinter вызов диалоговых окон открытия и сохранения файлов и работу с ними. При этом требуется дополнительно импортировать «подмодуль» tkinter - tkinter.filedialog, в котором описаны классы для окон данного типа:

from tkinter import *
from tkinter import filedialog

root = Tk()
document_open = filedialog.askopenfilename()
document_save = filedialog.asksaveasfilename()

root.mainloop()
1
2
3
4
5
6
7
8

Здесь создаются два объекта (document_open и document_save): один вызывает диалоговое окно «Открыть», а другой «Сохранить как…». При выполнении скрипта, они друг за другом выводятся на экран после появления главного окна. Если не создать root, то оно все-равно появится на экране, однако при попытке его закрытия в конце возникнет ошибка.

Упражнения

  1. Исследование: выведите в консоль результат вашего выбора в диалоговом окне.
  2. Что будет результатом вывода в консоль при выборе папок/файлов в диалоговых окнах и нажатии кнопки «ок»?
  3. Напишите программу с вызовом всех типов диалоговых окон для работы с файлами. Сколько их? И какие различия? (подскажет их PyCharm, когда наберете filedialog.ask)