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

Программирование на языке Python. Библиотека PyQT5. Некоторые возможности класса QWidget

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

PyQt5. События и свойства окон QWidget

Сегодня отвлечёмся от пока генеральной линии об элементах окон в PyQt5. Сделаем возврат к окнам, к классу QWidget. Мы начинали именно с них, вот в этой статье

Наша цель: некоторые методы и события класса QWidget.

Рассмотрим следующую программу. Окно этой программы представлено на рисунке. В окне есть элемент QLineEdit - поле редактирования. В нем через знак ";" отображаются текущие размеры окна и координаты курсора мыши, когда он находится в области окна. При попытке закрыть окно в поле редактирования появляется сообщение "Закрываем" и через 2 секунды приложения заканчивает свою работу.

Скриншот программы представлен ниже, далее указана ссылка еа текст программы.

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

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

  • Определить максимальные и минимальные размеры окна. Очень важная возможность, если программе придётся работать на разных компьютерах с разными экранами. Кроме того, изменение размеров окна меняет может закрывать отдельные го элементы. Чтобы это не происходило, можно зафиксировать минимальный размер окна. Для этого у класса QWidget есть два метода. В моей программе это строки

self.setMaximumSize(1800, 900)
self.setMinimumSize(380, 350)

  • Отмечу метод QWidget.setMouseTracking(True). Он разрешает отслеживать передвижение курсора по поверхности окна (см. ниже).
  • Событие QWidget.closeEvent(). Оно выполняется при закрытии окна. Мы переписали это событие. Напомню, что окно закрывается по умолчанию путём щелчка по кнопке-крестик в правом верхнем углу окна, а также нажатием клавиш Alt+F4.
  • При закрытии окна мы выводим сообщение в строку редактирования сообщение Закрываем. И делаем задержку time.sleep(2) - две секунды. О time см. вот эту статью.
  • В методе QWidget.closeEvent() очень важен метод (запомните его) QWidget.repaint(). Это перерисовка содержимого окна. Зачем он понадобился? Без него из-за задержки time.sleep(2) мы бы не увидели сообщение 'Закрываем', так как перерисованное окно мы бы не успели увидеть - оно бы закрылось.
  • Метод QWidget.resizeEvent() вызывается при изменении размеров окна. Сами размеры мы получаем с помощью метода QWidget.geometry(), который возвращает объект класса QRect. Соответственно методы класса QRect.width() и QRect.height() дают нам нужные размеры.
  • Движение курсора мыши по окну перехватывается методом QWidget.mouseMoveEvent() (см. выше метод QWidget.setMouseTracking(True)). Второй параметр метода event и даёт нам текущие координаты курсора (event.x() и event.y()).
  • Значения self.dx, self.dy, self.x, self.y обрабатываются методом setint().

Рисунок 1
Рисунок 1

Ну, пока всё!

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

Я люблю под окнами мечтать ;)
Я люблю под окнами мечтать ;)