На этом шаге мы рассмотрим пример использования такого позиционирования.
Прежде чем изучать контейнеры, рассмотрим возможность абсолютного позиционирования компонентов в окне. Итак, если при создании компонента указана ссылка на родительский компонент, то он выводится в позицию с координатами (0, 0). Иными словами, если мы добавим несколько компонентов, то все они отобразятся в одной и той же позиции, наложившись друг на друга. Последний добавленный компонент окажется на вершине этой кучи, а остальные компоненты станут видны лишь частично или вообще не видны. Размеры добавляемых компонентов будут соответствовать их содержимому.
Для перемещения компонента можно воспользоваться методом move(), а для изменения размеров - методом resize(). Выполнить одновременное изменение позиции и размеров позволяет метод setGeometry(). Все эти методы, а также множество других, позволяющих изменять позицию и размеры, мы уже рассматривали в шагах 26, 27, 28, 29. Если компонент не имеет родителя, то эти методы изменяют характеристики окна, а если при создании компонента указан родительский компонент, то методы изменяют характеристики только самого компонента.
Для примера выведем внутри окна надпись и кнопку, указав позицию и размеры для каждого компонента.
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Абсолютное позиционирование") window.resize(300, 120) label = QtWidgets.QLabel("Текст надписи", window) button = QtWidgets.QPushButton("Текст на кнопке", window) label.setGeometry(10, 10, 280, 60) button.resize(280, 30) button.move(10, 80) window.show() sys.exit(app.exec_())
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
Абсолютное позиционирование имеет следующие недостатки:
На следующем шаге мы рассмотрим горизонтальное и вертикальное выравнивание.