Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
PyQt5. События и свойства окон QWidget
Сегодня отвлечёмся от пока генеральной линии об элементах окон в PyQt5. Сделаем возврат к окнам, к классу QWidget. Мы начинали именно с них, вот в этой статье
Наша цель: некоторые методы и события класса QWidget.
Рассмотрим следующую программу. Окно этой программы представлено на рисунке. В окне есть элемент QLineEdit - поле редактирования. В нем через знак ";" отображаются текущие размеры окна и координаты курсора мыши, когда он находится в области окна. При попытке закрыть окно в поле редактирования появляется сообщение "Закрываем" и через 2 секунды приложения заканчивает свою работу.
Скриншот программы представлен ниже, далее указана ссылка еа текст программы.
Пояснение программы.
- Определить максимальные и минимальные размеры окна. Очень важная возможность, если программе придётся работать на разных компьютерах с разными экранами. Кроме того, изменение размеров окна меняет может закрывать отдельные го элементы. Чтобы это не происходило, можно зафиксировать минимальный размер окна. Для этого у класса 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().
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.