Диалоговые окна. Урок 13 курса «Tkinter. Программирование GUI на Python»
Пакет tkinter
содержит несколько модулей, предоставляющих доступ к уже готовым диалоговым окнам. Это окна различных сообщений, выбора по принципу «да-нет», открытия и сохранения файлов и др. В этом уроке рассмотрим примеры окон из модулей messagebox
и filedialog
пакета tkinter
.
Модули пакета необходимо импортировать отдельно. То есть вы импортируете содержимое tkinter
(например, from tkinter import *
) и отдельно входящий в состав пакета tkinter
модуль. Способы импорта на примере messagebox
и пример вызова одной из функций модуля:
import tkinter.messagebox
→tkinter.messagebox.askyesno()
from tkinter.messagebox import *
→askyesno()
from tkinter import messagebox
→messagebox.
from tkinter import messagebox as mb
(вместо mb может быть любой идентификатор) →mb.askyesno()
В уроке мы будем использовать последний вариант.
Модуль messagebox – стандартные диалоговые окна
Окно выбора «да» или «нет» – askyesno
:
from tkinter import * from tkinter import messagebox as mb def check(): answer = mb.askyesno( title="Вопрос", message="Перенести данные?") if answer: s = entry.get() entry.delete(0, END) label['text'] = s root = Tk() entry = Entry() entry.pack(pady=10) Button(text='Передать', command=check).pack() label = Label(height=3) label.pack() root.mainloop()
Нажатие «Да» в диалоговом окне возвращает в программу True
, «Нет» вернет False
(также как закрытие окна через крестик). Таким образом в коде можно обработать выбор пользователя.
Опции title
и message
являются позиционными, так что можно указывать только значения: askyesno("Вопрос", "Перенести данные?")
.
Подобные окна генерируются при использовании функции askokcancel
с надписями на кнопках «ОК» и «Отмена», askquestion
(возвращает не True
или False
, а строки ‘yes’ или ‘no’), askretrycancel
(«Повторить», «Отмена»), askyesnocancel
(«Да», «Нет», «Отмена»).
Другую группу составляют окна с одной кнопкой, которые служат для вывода сообщений различного характера. Это showerror
, showinfo
и showwarning
.
… def check(): s = entry.get() if not s.isdigit(): mb.showerror( "Ошибка", "Должно быть введено число") else: entry.delete(0, END) label['text'] = s …
Модуль filedialog – диалоговые окна открытия и сохранения файлов
Рассмотрим две функции из модуля filedialog
– askopenfilename
и asksaveasfilename
. Первая предоставляет диалоговое окно для открытия файла, вторая – для сохранения. Обе возвращают имя файла, который должен быть открыт или сохранен, но сами они его не открывают и не сохраняют. Делать это уже надо программными средствами самого Python.
from tkinter import * from tkinter import filedialog as fd def insert_text(): file_name = fd.askopenfilename() f = open(file_name) s = f.read() text.insert(1.0, s) f.close() def extract_text(): file_name = fd.asksaveasfilename( filetypes=(("TXT files", "*.txt"), ("HTML files", "*.html;*.htm"), ("All files", "*.*"))) f = open(file_name, 'w') s = text.get(1.0, END) f.write(s) f.close() root = Tk() text = Text(width=50, height=25) text.grid(columnspan=2) b1 = Button(text="Открыть", command=insert_text) b1.grid(row=1, sticky=E) b2 = Button(text="Сохранить", command=extract_text) b2.grid(row=1, column=1, sticky=W) root.mainloop()
Опция filetype
позволяет перечислить типы файлов, которые будут сохраняться или открываться, и их расширения.
Примечание. В приведенном коде при размещении текстового поля методом grid
не указаны аргументы row
и column
. В таких случаях подразумевается, что их значениями являются нули.
Практическая работа
В приведенной в уроке программе с функциями askopenfilename
и
генерируются исключения, если диалоговые окна были закрыты без выбора или указания имени файлов.
Напишите код обработки данных исключений. При этом для пользователя должно появляться информационное диалоговое окно с сообщением о том, что файл не загружен или не сохранен.
Добавьте кнопку «Очистить», которая удаляет текст из поля. Перед удалением пользователь должен подтвердить свои намерения через соответствующее диалоговое окно.
Курс с примерами решений практических работ: pdf-версия, android-приложение.
Меню и тулбары в PyQt5
В этой части учебника PyQt5, мы создадим меню и тулбар (панель инструментов). Меню представляет собой группу команд, расположенных в менюбаре. Панель инструментов содержит кнопки с некоторыми общими командами в приложении.
Главное окно
Класс QMainWindow предоставляет главное окно приложения. Это позволяет создать классический каркас приложений с статусбаром, тулбаром и меню.
Статусбар (строка состояния)
Строка состояния является виджетом, который используется для отображения информации о состоянии.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QApplication class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.statusBar().showMessage('Ready') self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Statusbar') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Статусбар создаётся с помощью функции QMainWindow.
self.statusBar().showMessage('Ready')
Чтобы получить строку состояния, мы вызываем метод statusBar() класса QtWidgets.QMainWindow. Первый вызов метода создает строку состояния. Последующие вызовы возвращают объект статусбара. showMessage() отображает сообщение в строке состояния.
Строка меню
Строка меню — общая часть приложения с графическим интерфейсом. Это группа команд, расположенных в различных меню.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(qApp.quit) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Menubar') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
В приведенном выше примере, мы создаем строку меню с одним меню. Это меню будет содержать одно действие, которое будет прекращать программу. Строка состояния также создается. Действие доступно с помощью Ctrl + Q.
exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application')
QAction является абстракцией для действий, совершенных из меню, панели инструментов, или комбинаций клавиш. В этих трех строках, мы создаем действие с соответствующей иконкой. Кроме того, для этого действия определяется комбинация клавиш. Третья строка создает подсказку, которая показывается в строке состояния, когда вы наведёте указатель мыши на пункт меню.
exitAction.triggered.connect(qApp.quit)
Когда мы выбираем именно это действие, срабатывает сигнал. Сигнал подключен к методу quit() виджета QApplication. Это завершает приложение.
menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction)
Метод menuBar() создает строку меню. Мы создаем меню файла и добавляем к нему действие выхода.
Панель инструментов (тулбар)
Меню группируют все команды, которые мы можем использовать в приложении.
Панели инструментов обеспечивают быстрый доступ к наиболее часто используемым командам.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): exitAction = QAction(QIcon('exit24.png'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction. triggered.connect(qApp.quit) self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Toolbar') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Здесь практически всё аналогично статусбару.
Объединяя все вместе
В последнем примере этого раздела мы создадим строку меню, панель инструментов и статусную строку. Мы также создадим центральный виджет.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): textEdit = QTextEdit() self.setCentralWidget(textEdit) exitAction = QAction(QIcon('exit24.png'), 'Exit', self) exitAction. setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.close) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction) toolbar = self.addToolBar('Exit') toolbar.addAction(exitAction) self.setGeometry(300, 300, 350, 250) self.setWindowTitle('Main window') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Данный пример кода создает скелет классического приложения с графическим интерфейсом с меню, тулбаром и статусбаром.
textEdit = QTextEdit() self.setCentralWidget(textEdit)
Здесь мы создаем виджет редактирования текста. Мы его назначаем центральным виджетом QMainWindow. Центральный виджет занимает все пространство, которое осталось.
В этой части урока PyQt5, мы работали с меню, панелью инструментов, строкой состояния и главным окном приложения.
Для вставки кода на Python в комментарий заключайте его в теги <pre><code>Ваш код</code></pre>
Свежее
- Модуль csv — чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
Категории
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
Полезные материалы
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Мы в соцсетях
University of Miami
ПОДАТЬ ЗАЯВКУ ПЛАНИРУЙТЕ ПОСЕЩЕНИЕ ЗАПРОСИТЬ ИНФОРМАЦИЮ ПРИЕМ В ПОСТУПЛЕНИЕ
Страсть к моде и роскоши
Студенческая организация Клуба роскоши и моды ориентирована на мир моды и роскоши.
Праздник освещает донорскую поддержку студентов
Праздник доноров стипендий 2023 года подчеркнул силу студенческих стипендий для изменения жизни.
ПОДАТЬ ЗАЯВКУ ПЛАНИРУЙТЕ ПОСЕЩЕНИЕ ЗАПРОСИТЬ ИНФОРМАЦИЮ ПРИЕМ В ПОСТУПЛЕНИЕ
Страсть к моде и роскоши
Студенческая организация Клуба роскоши и моды сосредоточена на мире моды и роскоши.
Праздник освещает донорскую поддержку студентов
Праздник доноров стипендий 2023 года подчеркнул силу студенческих стипендий для изменения жизни.
ПОДАТЬ ЗАЯВКУ ПЛАНИРУЙТЕ ПОСЕЩЕНИЕ ЗАПРОСИТЬ ИНФОРМАЦИЮ ПРИЕМ В ПОСТУПЛЕНИЕ
Страсть к моде и роскоши
Студенческая организация Клуба роскоши и моды сосредоточена на мире моды и роскоши.
Праздник освещает донорскую поддержку студентов
Празднование стипендий 2023 года подчеркнуло способность студенческих стипендий менять жизни.
Выпускник Стюарт М. Блох и его жена, посол Джулия Чанг Блох, подтвердили свою давнюю приверженность Университету Майами, нашим выпускникам и обучению на протяжении всей жизни.
Глория Эстефан станет первой латиноамериканкой, введенной в Зал славы авторов песен
Американская певица кубинского происхождения, автор песен, актриса, икона Майами и выпускница университета будет введена в должность в организацию.
Новая книга в честь 75-летия Инженерного колледжа
Тройная трость Доктор Эдвард Дауэр отмечает веху, историю и достижения колледжа в своей новой книге «Преобразование жизни, создание лидеров, передача знаний».
Центр выпускников Ньюмана снова открывается
После многомесячного обновления внешнего вида NAC, гостеприимное пространство кампуса для посещения каней, их семей и друзей с момента его открытия в 2010 году, снова открыто.
Выпускник Стюарт М. Блох и его жена, посол Джулия Чанг Блох, подтвердили свою давнюю приверженность Университету Майами, нашим выпускникам и обучению на протяжении всей жизни.
Глория Эстефан станет первой латиноамериканкой, внесенной в Зал славы авторов песен
Американская певица кубинского происхождения, автор песен, актриса, икона Майами и выпускница университета будет введена в должность в организацию.
Новая книга в честь 75-летия Инженерного колледжа
Тройная трость Доктор Эдвард Дауэр отмечает веху, историю и достижения колледжа в своей новой книге «Преобразование жизни, создание лидеров, передача знаний».
Центр выпускников Ньюмана снова открывается
После многомесячного обновления внешнего вида NAC, гостеприимное пространство кампуса для посещения каней, их семей и друзей с момента его открытия в 2010 году, снова открыто.
Выпускник Стюарт М. Блох и его жена, посол Джулия Чанг Блох, подтвердили свою давнюю приверженность Университету Майами, нашим выпускникам и обучению на протяжении всей жизни.
Глория Эстефан станет первой латиноамериканкой, введенной в Зал славы авторов песен
Американская певица кубинского происхождения, автор песен, актриса, икона Майами и выпускница университета будет введена в должность в организацию.
Новая книга в честь 75-летия Инженерного колледжа
Тройная трость Доктор Эдвард Дауэр отмечает веху, историю и достижения колледжа в своей новой книге «Преобразование жизни, создание лидеров, передача знаний».
Центр выпускников Ньюмана снова открывается
После многомесячного обновления внешнего вида NAC, гостеприимное пространство кампуса для посещения каней, их семей и друзей с момента его открытия в 2010 году, снова открыто.
Дороти С. Бенсон Старший многоцелевой комплекс
1-й квартал 2020 г. Ходьба по воде
Работаем вместе, чтобы служить нашему сообществу!
Многоцелевой комплекс Dorothy C. Benson Senior, обычно называемый The Benson Center, обслуживает жителей округа Северный Фултон на трех различных уровнях обслуживания для независимых, полунезависимых и полузависимых лиц. В Центре Бенсона вы найдете познавательные занятия и программы, которые сделают вашу жизнь лучше и сделают вас социально активными и здоровыми.
Мы приветствуем вас и надеемся, что вы присоединитесь к нашему кругу членов.
Многоцелевой центр
Целью Многоцелевого центра является обслуживание независимых участников в возрасте 55 лет и старше посредством различных передовых программ (классов), услуг и мероприятий. Программирование Многоцелевого центра ориентировано на участников, которые ищут занятия и возможности для создания и поддержки социальных сетей.
Функция программ:
- Занятия искусством и компьютерными программами
- Возможности социальных сетей
- Питательные блюда (завтрак и обед)
- Лечебно-социальная деятельность и обучение
- Медицинские услуги
- Водные виды спорта и другие фитнес-программы
- Транспорт
Центр дневного ухода за взрослыми
Центр дневного ухода за взрослыми предлагает структурированную комплексную программу для взрослых с функциональными ограничениями в течение всего дня или его части. Примеры функциональных ограничений могут включать некоторые трудности с передвижением, приемом пищи, напоминанием о туалете, а также другие физические или когнитивные проблемы. Наши программы предлагают разнообразные социальные, медицинские и сопутствующие услуги поддержки в условиях защиты. Эта программа предназначена для людей, которые нуждаются лишь в минимальном наблюдении и помощи.
Центр дневного ухода за взрослыми поддерживает немощных взрослых, которые предпочитают оставаться в обществе, а не преждевременно переезжать в частный дом престарелых или учреждение престарелых. Эта программа также поддерживает лиц, осуществляющих уход, которые предпочитают продолжать ухаживать дома за взрослым с физическими или умственными недостатками. Округ Фултон предоставляет социальную модель дневной программы для взрослых с ограниченным набором медицинских услуг для лиц в возрасте 55 лет и старше.
Особенности программ:
- Полноценное питание (завтрак, обед и перекусы в течение дня)
- Занятия физкультурой и обучение
- Деятельность, способствующая социализации
- Мониторинг здоровья и лекарств
- Водный и наземный фитнес
- Услуги по обучению и поддержке лиц, осуществляющих уход
- Экскурсии и специальные мероприятия Художественные программы
Социальный центр
Социальный центр предназначен для лиц в возрасте 60 лет и старше, которые ищут возможности для общения в небольшой группе.