На этом шаге мы рассмотрим способы выполнения указанной операции.
В качестве фона окна (или компонента) можно использовать изображение. Для этого необходимо получить текущую палитру компонента с помощью метода palette(), а затем вызвать метод setBrush() класса QPalette. Формат метода:
setBrush ([<Состояние>, ]<Роль>, <QBrush>)
Первые два параметра аналогичны соответствующим параметрам в методе setColor(), который мы рассматривали на предыдущем шаге. В третьем параметре указывается кисть - экземпляр класса QBrush из модуля QtGui. Форматы конструктора класса:
<Объект> = QBrush(<Стиль кисти>) <Объект> = QBrush(<Цвет>[, <Стиль кисти>=SolidPattern]) <Объект> = QBrush(<Цвет>, <QPixmap>) <Объект> = QBrush(<QPixmap>) <Объект> = QBrush(<QImage>) <Объект> = QBrush(<QBrush>) <Объект> = QBrush(<QGradient>)
В параметре <Стиль кисти> указываются атрибуты из класса QtCore.Qt, задающие стиль кисти, - например: NoBrush, SolidPattern, DenselPattern, Dense2Pattern, Dense3Pattern, Dense4Pattern, Dense5Pattern, Dense6Pattern, Dense7Pattern, CrossPattern и другие. С помощью этого параметра можно сделать цвет сплошным (SolidPattern) или имеющим текстуру (например, атрибут CrossPattern задает текстуру в виде сетки). Использование возможных стилей проиллюстрировано на рисунке 1.
Рис.1. Результат использования возможных стилей
В параметре <Цвет> указывается цвет кисти. В качестве значения можно указать атрибут из класса QtCore.Qt (например, black, white и т. д.) или экземпляр класса QColor (например, QColor("red"), QColor("#ff0000"), QColor(255, 0, 0) и др.). При этом установка сплошного цвета фона окна может выглядеть так:
pal = window.palette()
pal.setBrush(QtGui.QPaiette.Normal, QtGui.QPaietteWindow,
QtGui.QBrush(QtGui.QColor("#008800"), QtCore.Qt.SolidPattern))
window.setPalette(pal)
Параметры <QPixmap> и <QImage> позволяют передать объекты изображений. Конструкторы этих классов принимают путь к файлу, который может быть как абсолютным, так и относительным.
Параметр <QBrush> позволяет создать кисть на основе другой кисти, а параметр <QGradient> - на основе градиента, представленного объектом класса QGradient (это мы рассмотрим позже).
После настройки палитры необходимо вызвать метод setPalette() и передать ему измененный объект палитры. Следует помнить, что компоненты-потомки по умолчанию имеют прозрачный фон и не перерисовываются автоматически. Чтобы включить перерисовку, необходимо передать значение True в метод setAutoFillBackground().
Указать, какое изображение используется в качестве фона, можно также с помощью CSS-атрибутов background и background-image. С помощью CSS-атрибута background-repeat можно дополнительно указать режим повтора фонового рисунка. Он может принимать значения repeat, repeat-x (повтор только по горизонтали), repeat-y (повтор только по вертикали) и no-repeat (не повторяется).
Создадим окно с надписью. Для активного окна установим одно изображение (с помощью изменения палитры), а для надписи - другое (с помощью CSS-атрибута background-image).
# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Изображение в качестве фона") window.resize(300, 200) pal = window.palette() pal.setBrush(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QBrush(QtGui.QPixmap("img2.jpg"))) window.setPalette(pal) label = QtWidgets.QLabel("Текст надписи") label.setAlignment(QtCore.Qt.AlignCenter) # Задание изображения и цвета надписи label.setStyleSheet("background-image: url(cartitle.jpg); color: white;") label.setAutoFillBackground(True) vbox = QtWidgets.QVBoxLayout() vbox.addWidget(label) window.setLayout(vbox) window.show() sys.exit(app.exec_())
Результат работы приложения изображен на рисунке 2.
Рис.2. Результат работы приложения
На следующем шаге мы рассмотрим создание окна произвольной формы.