Шаг 42.
Библиотека PyQt5.
Управление окном приложения. Вывод изображения в качестве фона

    На этом шаге мы рассмотрим способы выполнения указанной операции.

    В качестве фона окна (или компонента) можно использовать изображение. Для этого необходимо получить текущую палитру компонента с помощью метода 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. Результат работы приложения

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




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