Найти тему
programmer's notes (python and more)

Программирование на языке Python. Библиотека PyQt5. Модальные окна и класс QDialog

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Создание модальных окон с помощью класса QDialog

Обычно в программе используется не одно окно. Ранее мы описывали специальные диалоговые окна. Их особенность в том, что при их запуске блокируется возможность доступа к другим окнам программы. Такого типа окна называются модальными. Сегодня поговорим о том, как создавать и запускать из основного окна окно модального типа. Такие окна обладают всеми свойствами обчных окон, но они блокируют доступ к родительскому окну. Для этого удобный инструмент QtWidgets.QDialog. При этом основное окно называется родительским, а модальное окно - дочерним.

Модальные окна в определённой степени очень полезны. Они блокируют главное окно. В противном случае данные бы, например, вводились в двух (и более) окнах и здесь, возможно, понадобилась бы какая-то синхронизация, а это усложняло бы алгоритм работы программы. С модальным же окном всё значительно проще.

Ну давайте перейдём к примеру. Ниже представлена программа, создающая окно. С помощью кнопки в окне создаётся модальное окно. Ввод в строку редактирования (QLineEdit) данныъ одновренно транслирует в аналогичную строку главного окна (см. Рисунок 1).

Скриншот программы. Полный текст программы см. ниже по ссылке
Скриншот программы. Полный текст программы см. ниже по ссылке
primer243.py

Пояснение к программе.

  • Самые главные строчки
    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()).
Рисунок 1. Основное и модальное окна
Рисунок 1. Основное и модальное окна

Как видим в программе нет ничего сложно. Можно даже в реальном времени передавать данные из модального окна в родительское. А можно передавать данные и через глобальные переменные при закрытии модального окна.

Ну, пока всё!

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

Вы мне модально опишите ваше отношение
Вы мне модально опишите ваше отношение