Шаг 81.
Библиотека PyQt5. Размещение компонентов в окнах. Горизонтальное и вертикальное выравнивание (окончание)
На этом шаге мы рассмотрим методы, используемые для изменения содержимого контейнера.
Добавить компоненты в контейнер, удалить их и заменить другими позволяют следующие методы:
- addWidget () - добавляет компонент в конец контейнера. Формат метода:
addWidget (<Компонент> [, stretch=0] [, alignment=0 ] )
В первом параметре указывается ссылка на компонент. Необязательный параметр stretch задает фактор растяжения для ячейки, а параметр
alignment - выравнивание компонента внутри ячейки. Два последних параметра можно задавать в порядке следования или по именам в произвольном порядке:
hbox.addWidget(button1, 10, QtCore.Qt.AlignRight)
hbox.addWidget(button2, stretch=10)
hbox.addWidget(button3, alignment=QtCore.Qt.AlignRight)
- insertWidget () - добавляет компонент в указанную позицию контейнера. Формат метода:
insertWidget (<Индекс>, <Компонент>[, stretch=0][, alignment=0])
Если в первом параметре указано значение 0, компонент будет добавлен в начало контейнера, а если - отрицательное значение, то компонент добавляется в конец контейнера.
Иное значение указывает определенную позицию. Остальные параметры аналогичны параметрам метода addWidget(). Пример:
hbox.addWidget(button1)
hbox.insertWidget(-1, button2) # Добавление в конец
hbox.insertWidget(0, button3) # Добавление в начало
- removeWidget (<Компонент>) - удаляет указанный компонент из контейнера;
- replaceWidget () - заменяет присутствующий в контейнере компонент другим. Формат метода:
replaceWidget (<Заменяемый компонент>, <Заменяющий компонент>,
[, options=FindChildrenRecursively] )
В необязательном параметре options можно задать режим поиска заменяемого компонента с помощью одного из аттрибутов класса
QtCore.Qt:
- FindDirectChildrenOnly (или 0) - искать только среди содержимого текущего контейнера и
- FindChildrenRecursively (или 1) - искать среди содержимого текущего и всех вложенных в него контейнеров (поведение по умолчанию);
- addLayout () - добавляет другой контейнер в конец текущего контейнера. С помощью этого метода можно вкладывать один контейнер в другой, создавая таким образом
структуру любой сложности. Формат метода:
addLayout (<Контейнер>[, stretch=0])
- insertLayout () - добавляет другой контейнер в указанную позицию текущего контейнера. Если в первом параметре задано отрицательное значение, то контейнер добавляется
в конец. Формат метода:
insertLayout (<Индекс>, <Контейнер>[, stretch=0])
- addSpacing (<Paзмер>) - добавляет пустое пространство указанного размера в конец контейнера. Размер пустого пространства задается в пикселях. Пример:
- insertSpacing (<Индекс>, <Размер>) - добавляет пустое пространство указанного размера в определенную позицию. Размер пустого пространства
задается в пикселях. Если первым параметром передается отрицательное значение, то пространство добавляется в конец;
- addStretch ([stretch=0]) - добавляет пустое растягиваемое пространство с нулевым минимальным размером и фактором растяжения stretch в конец контейнера.
Это пространство можно сравнить с пружиной, вставленной между компонентами, а параметр stretch - с жесткостью пружины;
- insertStretch (<Индекс>[, stretch=0] ) - метод аналогичен методу addStretch(), но добавляет растягиваемое пространство в указанную позицию.
Если в первом параметре задано отрицательное значение, то пространство добавляется в конец контейнера.
Параметр alignment в методах addWidget() и insertWidget() задает выравнивание компонента внутри ячейки. В этом параметре можно указать
следующие атрибуты класса QtCore.Qt:
- AlignLeft (или 1) - горизонтальное выравнивание по левому краю;
- AlignRight (или 2) - горизонтальное выравнивание по правому краю;
- AlignHCenter (или 4) - горизонтальное выравнивание по центру;
- AlignJustify (или 8) - заполнение всего пространства;
- AlignTop (или 32) - вертикальное выравнивание по верхнему краю;
- AlignBottom (или 64) - вертикальное выравнивание по нижнему краю;
- AlignVCenter (или 128) - вертикальное выравнивание по центру;
- AlignBaseline (или 256) - вертикальное выравнивание по базовой линии;
- AlignCenter (= AlignVCenter | AlignHCenter) - горизонтальное и вертикальное выравнивание по центру;
- AlignAbsolute (или 16) - если в методе setLayoutDirection() из класса QWidget указан атрибут QtCore.Qt.RightToLeft, то атрибут
AlignLeft задает выравнивание по правому краю, а атрибут AlignRight - по левому краю. Чтобы атрибут AlignLeft всегда
соответствовал именно левому краю, необходимо указать комбинацию AlignAbsolute | AlignLeft. Аналогично следует поступить с
атрибутом AlignRight.
Можно задавать и комбинации атрибутов. В них может присутствовать только один атрибут горизонтального выравнивания и только один атрибут вертикального выравнивания.
Например, комбинация AlignLeft | AlignTop задает выравнивание по левому и верхнему краям. Противоречивые значения приводят к непредсказуемым результатам.
Помимо рассмотренных, контейнеры поддерживают также следующие методы (здесь приведены только основные - полный их список ищите в документации):
- setDirection (<Направление>) - задает направление вывода компонентов. В параметре можно указать следующие атрибуты из класса QBoxLayout:
- LeftToRight (или 0) - слева направо (значение по умолчанию для горизонтального контейнера);
- RightToLeft (или 1) - справа налево;
- TopToBottom (или 2) - сверху вниз (значение по умолчанию для вертикального контейнера);
- BottomToTop (или 3) - снизу вверх;
- setContentsMargins () - задает величины отступов от границ контейнера до компонентов. Форматы метода:
setContentsMargins (<Слева>, <Сверху>, <Справа>, <Снизу>)
setContentsMargins (<QMargins>)
Примеры:
hbox.setContentsMargins (2, 4, 2, 4)
m = QtCore.QMargins(4, 2, 4, 2)
hbox.setContentsMargins (m)
- setSpacing (<Расстояние>) - задает расстояние между компонентами.
На следующем шаге мы рассмотрим выравнивание по сетке.
Предыдущий шаг
Содержание
Следующий шаг