В этой части изучения Tkinter мы поработаем с диалоговыми окнами. Диалоговые окна или диалоги – это неотъемлемая часть большинства приложений с графическим интерфейсом. В целом диалог – это общение между двумя или более людьми. В компьютерном приложении диалогами называют специальные окна, которые позволяют «говорить» с приложением.
Содержание курса
- Создание окна по центру и кнопка выхода в Tkinter
- Разметка виджетов в Tkinter — pack, grid и place
- Виджеты Checkbutton, Label, Scale и Listbox в Tkinter
- Меню, подменю и панель инструментов в Tkinter
- Диалоговые окна в Tkinter — Выбор цвета — Выбор файла
- Рисуем линии, прямоугольники, круг и текст в Tkinter
- Пишем игру змейка на Tkinter
Содержание статьи
- Всплывающие окна с уведомлениями в Tkinter
- Выбор цвета из цветовой палитры в Tkinter
- Окно для выбора файла или папки в Tkinter
Диалоговые окна используются для:
- ввода данных;
- редактирования данных;
- настроек приложения и прочего.
Диалоговые окна имеют огромное значение для коммуникации между пользователем и компьютерной программой.
Всплывающие окна с уведомлениями в Tkinter
Всплывающее окно с сообщением это удобные диалоги, которые показывают пользователю какое либо сообщение из приложения. В сообщениях содержится текстовая информация или изображения. Окна сообщений в Tkinter расположены в модуле tkMessageBox.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
from tkinter import Tk, BOTH from tkinter.ttk import Frame, Button from tkinter import messagebox as mbox class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Всплывающие окна с уведомлениями") self.pack() error = Button(self, text="Ошибка", command=self.onError) error.grid(padx=5, pady=5) warning = Button(self, text="Предупреждение", command=self.onWarn) warning.grid(row=1, column=0) question = Button(self, text="Вопрос", command=self.onQuest) question.grid(row=0, column=1) inform = Button(self, text="Информация", command=self.onInfo) inform.grid(row=1, column=1) def onError(self): mbox.showerror("Ошибка", "Не могу открыть файл") def onWarn(self): mbox.showwarning("Предупреждение", "Вызов устаревшей функции") def onQuest(self): mbox.askquestion("Вопрос", "Вы уверены, что хотите выйти?") def onInfo(self): mbox.showinfo("Информация", "Скачивание завершено") def main(): root = Tk() ex = Example() root.geometry("300x150+300+300") root.mainloop() if __name__ == '__main__': main() |
Мы используем grid разметку, чтобы создать сетку для 4 кнопок. Каждая из кнопок показывает разные всплывающие окна с сообщением.
1 |
import tkMessageBox as mbox |
Мы импортируем tkMessageBox, у которого есть функции для показа диалоговых окон.
1 |
error = Button(self, text="Error", command=self.onError) |
Мы создаем кнопку отображения ошибки, которая вызывается методом onError(). Внутри метода мы показываем диалоговое окно с текстом сообщения.
1 2 |
def onError(self): box.showerror("Ошибка", "Не могу открыть файл") |
В случае если мы нажимаем на кнопку с ошибкой, то нам показывается диалог ошибки. Мы используем функцию showerror(), чтобы вывести диалог на экран. Первый параметр этого метода – это заголовок окна. Второй параметр – само сообщение, которая является обычной строкой.
Выбор цвета из цветовой палитры в Tkinter
Мы можем создать диалоговое окно, в котором выбирается цвет. Для этого нужно воспользоваться модулем colorchooser из Tkinter.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from tkinter import Tk, Frame, Button, BOTH, SUNKEN from tkinter import colorchooser class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Цветовая палитра") self.pack(fill=BOTH, expand=1) self.btn = Button(self, text="Выберите цвет", command=self.onChoose) self.btn.place(x=20, y=30) self.frame = Frame(self, border=1, relief=SUNKEN, width=100, height=100) self.frame.place(x=160, y=30) def onChoose(self): (rgb, hx) = colorchooser.askcolor() self.frame.config(bg=hx) def main(): root = Tk() ex = Example() root.geometry("300x150+300+300") root.mainloop() if __name__ == '__main__': main() |
У нас есть кнопка и рамка. Нажимая на кнопку, мы видим диалоговое окно с цветовой палитрой. Мы изменим цвет фона, выбирая нужный цвет в появившемся окне.
1 2 |
(rgb, hx) = tkColorChooser.askcolor() self.frame.config(bg=hx) |
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Функция askcolor() показывает диалог. Если мы нажмем «ОК», значение возвращается. Это значение цвета в шестнадцатиричном формате RGB. Во второй линии мы изменяем цвет рамки, возвращая значение цвета.
Окно для выбора файла или папки в Tkinter
Диалоговое окно tkFileDialog позволяет пользователю выбирать файл из имеющихся на компьютере пользователя файлов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
from tkinter import Frame, Tk, BOTH, Text, Menu, END from tkinter import filedialog class Example(Frame): def __init__(self): super().__init__() self.initUI() def initUI(self): self.master.title("Окно для выбора файла") self.pack(fill=BOTH, expand=1) menubar = Menu(self.master) self.master.config(menu=menubar) fileMenu = Menu(menubar) fileMenu.add_command(label="Открыть", command=self.onOpen) menubar.add_cascade(label="Файл", menu=fileMenu) self.txt = Text(self) self.txt.pack(fill=BOTH, expand=1) def onOpen(self): ftypes = [('Python файлы', '*.py'), ('Все файлы', '*')] dlg = filedialog.Open(self, filetypes = ftypes) fl = dlg.show() if fl != '': text = self.readFile(fl) self.txt.insert(END, text) def readFile(self, filename): with open(filename, "r") as f: text = f.read() return text def main(): root = Tk() ex = Example() root.geometry("300x250+300+300") root.mainloop() if __name__ == '__main__': main() |
В нашем примере, мы использовали tkFileDialog, чтобы открыть всплывающее диалоговое окно для выбора файла и отобразить контент в текстовом виджете, по сути небольшой редактор кода на Tkinter.
1 |
self.txt = Text(self) |
Это текстовой виджет, в котором мы будем вставлять содержимое выбранного файла.
1 |
ftypes = [('Python файлы', '*.py'), ('Все файлы', '*')] |
Это фильтры файлов по их расширению. Первое правило из списка показывает файлы с расширением .py
т.е. языка программирования Python, второе правило показывает все остальные форматы файлов.
1 2 |
dlg = tkFileDialog.Open(self, filetypes = ftypes) fl = dlg.show() |
Диалоговое окно для выбора файла было создано и отображается на экране. Мы получаем возвращенное значение, которое является путем к файлу.
1 |
text = self.readFile(fl) |
Мы читаем содержимое файла и записываем данный контент в текстовой виджет.
1 |
self.txt.insert(END, text) |
Текст вставляется в ранее созданном текстовом виджете.
В этой части обучения Tkinter мы поработали с диалоговыми окнами.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»