PyQt - Управление компоновкой
Виджет с графическим интерфейсом пользователя можно разместить внутри окна контейнера, указав его абсолютные координаты в пикселях. Координаты указаны относительно размеров окна, определенного методом setGeometry ().
setGeometry () синтаксис
QWidget.setGeometry(xpos, ypos, width, height)
В следующем фрагменте кода окно верхнего уровня размером 300 на 200 пикселей отображается в позиции (10, 10) на мониторе.
import sys
from PyQt4 import QtGui
def window():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
b = QtGui.QPushButton(w)
b.setText("Hello World!")
b.move(50,20)
w.setGeometry(10,10,300,200)
w.setWindowTitle(“PyQt”)
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
А PushButton виджет добавляется в окно и помещается на 50 пикселей вправо и на 20 пикселей ниже верхнего левого угла окна.
Этот Absolute Positioning, однако, не подходит по следующим причинам -
Положение виджета не меняется даже при изменении размера окна.
Внешний вид может быть неодинаковым на разных устройствах отображения с разным разрешением.
Изменить макет сложно, так как может потребоваться переработка всей формы.
PyQt API предоставляет классы макета для более элегантного управления позиционированием виджетов внутри контейнера. Преимущества менеджеров компоновки перед абсолютным позиционированием:
Размер виджетов внутри окна изменяется автоматически.
Обеспечивает единообразный внешний вид на устройствах отображения с разным разрешением.
Динамическое добавление или удаление виджета возможно без изменения дизайна.
Вот список классов, которые мы будем обсуждать один за другим в этой главе.
Sr.No. | Классы и описание |
---|---|
1 | QBoxLayout
Класс QBoxLayout выстраивает виджеты вертикально или горизонтально. Его производными классами являются QVBoxLayout (для размещения виджетов по вертикали) и QHBoxLayout (для размещения виджетов по горизонтали). |
2 | QGridLayout
Объект класса GridLayout представляет собой сетку ячеек, расположенных в строках и столбцах. Класс содержит метод addWidget (). Любой виджет можно добавить, указав количество строк и столбцов ячейки. |
3 | QFormLayout
QFormLayout - удобный способ создать форму с двумя столбцами, где каждая строка состоит из поля ввода, связанного с меткой. Как правило, левый столбец содержит метку, а правый столбец содержит поле ввода. |