Фон изображением в PyQt
Сам внешний вид делаю в QT Designer, создал файл стилей и установил фоновое изображение как background-image: url(:/background/2.jpg); в самом MainWindow, но вместе с этим все кнопки и остальные виджеты тоже окрасились этим фоном, как его оставить только на само окно?
ui модуль в коде:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'front.ui'
#
# Created by: PyQt5 UI code generator 5.14.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(300, 400)
MainWindow.setMinimumSize(QtCore.QSize(300, 400))
MainWindow.setMaximumSize(QtCore.QSize(300, 400))
MainWindow.setAutoFillBackground(False)
MainWindow.setStyleSheet("background-image: url(:/background/2.jpg);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.btnBrowse = QtWidgets.QPushButton(self.centralwidget)
self.btnBrowse.setGeometry(QtCore.QRect(0, 0, 131, 23))
self.btnBrowse.setObjectName("btnBrowse")
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setGeometry(QtCore.QRect(0, 20, 131, 151))
self.listWidget.setObjectName("listWidget")
self.btnArch = QtWidgets.QPushButton(self.centralwidget)
self.btnArch.setGeometry(QtCore.QRect(30, 170, 81, 23))
self.btnArch.setObjectName("btnArch")
self.browseArch = QtWidgets.QPushButton(self.centralwidget)
self.browseArch.setGeometry(QtCore.QRect(170, 0, 131, 23))
self.browseArch.setObjectName("browseArch")
self.exlist = QtWidgets.QListWidget(self.centralwidget)
self.exlist.setGeometry(QtCore.QRect(170, 20, 131, 151))
self.exlist.setObjectName("exlist")
self.exButton = QtWidgets.QPushButton(self.centralwidget)
self.exButton.setGeometry(QtCore.QRect(190, 170, 91, 23))
self.exButton.setObjectName("exButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Archivator"))
self.btnBrowse.setText(_translate("MainWindow", "Выбрать папку"))
self.btnArch.setText(_translate("MainWindow", "Архивировать"))
self.browseArch.setText(_translate("MainWindow", "Выбрать архив"))
self.exButton.setText(_translate("MainWindow", "Извлечь"))
import res_rc
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(300, 400)
MainWindow.setMinimumSize(QtCore.QSize(300, 400))
MainWindow.setMaximumSize(QtCore.QSize(300, 400))
MainWindow.setAutoFillBackground(False)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.btnBrowse = QtWidgets.QPushButton(self.centralwidget)
self.btnBrowse.setGeometry(QtCore.QRect(0, 0, 131, 23))
self.btnBrowse.setObjectName("btnBrowse")
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setGeometry(QtCore.QRect(0, 20, 131, 151))
self.listWidget.setObjectName("listWidget")
self.btnArch = QtWidgets.QPushButton(self.centralwidget)
self.btnArch.setGeometry(QtCore.QRect(30, 170, 81, 23))
self.btnArch.setObjectName("btnArch")
self.browseArch = QtWidgets.QPushButton(self.centralwidget)
self.browseArch.setGeometry(QtCore.QRect(170, 0, 131, 23))
self.browseArch.setObjectName("browseArch")
self.exlist = QtWidgets.QListWidget(self.centralwidget)
self.exlist.setGeometry(QtCore.QRect(170, 20, 131, 151))
self.exlist.setObjectName("exlist")
self.exButton = QtWidgets.QPushButton(self.centralwidget)
self.exButton.setGeometry(QtCore.QRect(190, 170, 91, 23))
self.exButton.setObjectName("exButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 300, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Archivator"))
self.btnBrowse.setText(_translate("MainWindow", "Выбрать папку"))
self.btnArch.setText(_translate("MainWindow", "Архивировать"))
self.browseArch.setText(_translate("MainWindow", "Выбрать архив"))
self.exButton.setText(_translate("MainWindow", "Извлечь"))
class Demo(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Demo, self).__init__(parent)
self.setupUi(self)
self.setStyleSheet('.QWidget {background-image: url(lena.jpg);}') # <<<---
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Demo()
w.show()
sys.exit(app.exec_())
Автор решения: Василий
→ Ссылка
В таблице стилей MainWidow указать на какой именно виджет должен распространяться бэкграунд:
QMainWindow#MainWindow{
background-image:url(:/image/image/image_fon.jpeg);
}
В этом случае стиль фона не наследуется. В редакторе у меня не показывает, но на предпросмотре показывает.

