Шаг 29.
Библиотека PyQt5. Управление окном приложения. Местоположение окна на экране и управление им (окончание)

    На этом шаге мы рассмотрим алгоритмы, размещающие окно по центру.

    Для отображения окна по центру экрана, а также у правой или нижней его границы, необходимо знать размеры экрана. Для получения размеров экрана вначале следует вызвать статический метод QApplication.desktop(), который возвращает ссылку на компонент рабочего стола, представленный экземпляром класса QDesktopWidget из модуля QtWidgets. Получить размеры экрана позволяют следующие методы этого класса:

    Приведем пример отображения окна приблизительно по центру экрана.

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("Вывод окна по центру экрана")
window.resize(300, 100)
desktop = QtWidgets.QApplication.desktop()
x = (desktop.width() - window.width()) // 2
y = (desktop.height() - window.height()) // 2
window.move(x, y)
window.show()
sys.exit(app.exec_())
Архив с файлом можно взять здесь.

    В этом примере мы воспользовались методами width() и height(), которые не учитывают высоту заголовка и ширину границ. В большинстве случаев этого способа достаточно. Если же при выравнивании необходима точность, то для получения размеров окна можно воспользоваться методом frameSize(). Однако этот метод возвращает корректные значения лишь после отображения окна. Если код выравнивания по центру расположить после вызова метода show(), то окно отобразится вначале в одном месте экрана, а затем переместится в центр, что вызовет неприятное мелькание. Чтобы исключить такое мелькание, следует вначале отобразить окно за пределами экрана, а затем переместить его в центр экрана:

# Вывод окна точно по центру экрана
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("Вывод окна по центру экрана")
window.resize(300, 100)
window.move(window.width() * -2, 0)
window.show()
desktop = QtWidgets.QApplication.desktop()
x = (desktop.width() - window.frameSize().width()) // 2
y = (desktop.height() - window.frameSize().height()) // 2
window.move(x, y)
sys.exit(app.exec_())
Архив с файлом можно взять здесь.

    Этот способ можно также использовать для выравнивания окна по правому краю экрана. Например, чтобы расположить окно в правом верхнем углу экрана, необходимо заменить код из предыдущего примера, выравнивающий окно по центру, следующим кодом:

desktop = QtWidgets.QApplication.desktop()
x = desktop.width() - window.frameSize().width()
window.move(x, 0)
Архив с файлом можно взять здесь.

    Если попробовать вывести окно в правом нижнем углу, то может возникнуть проблема, поскольку в операционной системе Windows в нижней части экрана располагается панель задач, и окно частично окажется под ней. Здесь нам пригодится метод availableGeometry(), позволяющий получить высоту панели задач, расположенной в нижней части экрана, следующим образом:

desktop = QtWidgets.QApplication.desktop() 
taskBarHeight = (desktop.screenGeometry().height() - 
      desktop.availableGeometry().height() )

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

    На следующем шаге мы рассмотрим указание координат и размеров.




Предыдущий шаг Содержание Следующий шаг