Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Создание модальных окон с помощью класса QDialog
Обычно в программе используется не одно окно. Ранее мы описывали специальные диалоговые окна. Их особенность в том, что при их запуске блокируется возможность доступа к другим окнам программы. Такого типа окна называются модальными. Сегодня поговорим о том, как создавать и запускать из основного окна окно модального типа. Такие окна обладают всеми свойствами обчных окон, но они блокируют доступ к родительскому окну. Для этого удобный инструмент QtWidgets.QDialog. При этом основное окно называется родительским, а модальное окно - дочерним.
Модальные окна в определённой степени очень полезны. Они блокируют главное окно. В противном случае данные бы, например, вводились в двух (и более) окнах и здесь, возможно, понадобилась бы какая-то синхронизация, а это усложняло бы алгоритм работы программы. С модальным же окном всё значительно проще.
Ну давайте перейдём к примеру. Ниже представлена программа, создающая окно. С помощью кнопки в окне создаётся модальное окно. Ввод в строку редактирования (QLineEdit) данныъ одновренно транслирует в аналогичную строку главного окна (см. Рисунок 1).
Пояснение к программе.
- Самые главные строчки
self.ex2 = winm(self)
self.ex2.exec_()
Запуск модального окна.
При этом class winm(QDialog) наследует именно от QDialog. - Чтобы окно было именно модальным нужно выполнить self.setWindowModality(Qt.WindowModal) и выполнять конструктор именно с указанием объекта родительского окна super().__init__(wn). wn это как раз тот самый объект родительского окна.
- Ну и самое интересное. Ввод данных в строке редактирования модального окна, автоматически направляется также и в родительского окно self.wn.ql1.setText(self.ql1.text()).
Как видим в программе нет ничего сложно. Можно даже в реальном времени передавать данные из модального окна в родительское. А можно передавать данные и через глобальные переменные при закрытии модального окна.
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.