Шаг 80.
Библиотека PyQt5.
Размещение компонентов в окнах. Горизонтальное и вертикальное выравнивание

    На этом шаге мы приведем первоначальные сведения о контейнерах и пример их использования.

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

    Для автоматического выравнивания компонентов используются два класса:

    Иерархия наследования для этих классов выглядит так:

  (QObject, QLayoutItem) - QLayout - QBoxLayout - QHBoxLayout 
  (QObject, QLayoutItem) - QLayout - QBoxLayout - QVBoxLayout

    Обратите внимание, что указанные классы не являются наследниками класса QWidget, a следовательно, не обладают собственным окном и не могут использоваться отдельно. Поэтому контейнеры обязательно должны быть привязаны к родительскому компоненту.

    Передать ссылку на родительский компонент можно через конструктор классов QHBoxLayout и QVBoxLayout. Кроме того, можно передать ссылку на контейнер в метод setLayout() родительского компонента. После этого все компоненты, добавленные в контейнер, автоматически привязываются к родительскому компоненту.

    Типичный пример использования класса QHBoxLayout показан в программе ниже, а увидеть результат выполнения этого кода можно на рисунке 1.

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("QHBoxLayout") # Родительский компонент - окно
window.resize(300, 60)
button1 = QtWidgets.QPushButton("1")
button2 = QtWidgets.QPushButton("2")
hbox = QtWidgets.QHBoxLayout()       # Создаем контейнер
hbox.addWidget(button1)              # Добавляем компоненты
hbox.addWidget(button2)
window.setLayout(hbox)               # Передаем ссыпку родителю
window.show()
sys.exit(app.exec_())
Архив с файлом можно взять здесь.

    Результат работы приложения изображен на рисунке 1.


Рис.1. Контейнер QHBoxLayout с двумя кнопками

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




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