Фон изображением в PyQt

Сам внешний вид делаю в QT Designer, создал файл стилей и установил фоновое изображение как background-image: url(:/background/2.jpg); в самом MainWindow, но вместе с этим все кнопки и остальные виджеты тоже окрасились этим фоном, как его оставить только на само окно?

trouble

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);
}

В этом случае стиль фона не наследуется. В редакторе у меня не показывает, но на предпросмотре показывает.

→ Ссылка