【问题标题】:how to add a background image to a main window without affecting the widgets in Pyqt5如何在不影响 Pyqt5 中的小部件的情况下将背景图像添加到主窗口
【发布时间】:2019-02-06 16:30:45
【问题描述】:

我想在我的主窗口中添加背景图片而不更改其中按钮的背景图片,并且还需要保持宽高比

我试过了

self.centralWidget.setStyleSheet("background-image: url(The_Project_logo.png); background-repeat: no-repeat; background-position: center")

但这会改变所有小部件的背景图像

【问题讨论】:

    标签: python pyqt5


    【解决方案1】:

    试试看:

    from PyQt5.QtWidgets import *
    
    class MainWindow(QMainWindow):
        def __init__(self):
            super().__init__()
    
            self.centralwidget = QWidget()
            self.setCentralWidget(self.centralwidget)
    
            self.pushButton1 = QPushButton("Button 1", self.centralwidget)
            self.pushButton2 = QPushButton("Button 2", self.centralwidget)
    
            lay = QHBoxLayout(self.centralwidget)
            lay.addWidget(self.pushButton1)
            lay.addWidget(self.pushButton2)
    
    
    stylesheet = """
        MainWindow {
            background-image: url("D:/_Qt/img/cat.jpg"); 
            background-repeat: no-repeat; 
            background-position: center;
        }
    """
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        app.setStyleSheet(stylesheet)     # <---
        window = MainWindow()
        window.resize(640, 640)
        window.show()
        sys.exit(app.exec_())
    


    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
    
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(400, 300)
            self.centralWidget = QtWidgets.QWidget(MainWindow)
            self.centralWidget.setObjectName("centralWidget")
    
            self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralWidget)
    
            self.horizontalLayout_2.setContentsMargins(11, 11, 11, 11)
            self.horizontalLayout_2.setSpacing(6)
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            self.horizontalLayout = QtWidgets.QHBoxLayout()
            self.horizontalLayout.setSpacing(6)
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.start_button = QtWidgets.QPushButton(self.centralWidget)
            self.start_button.setObjectName("start_button")
    
            self.horizontalLayout.addWidget(self.start_button)
            self.stop_button = QtWidgets.QPushButton(self.centralWidget)
            self.stop_button.setObjectName("stop_button")
            self.horizontalLayout.addWidget(self.stop_button)
            self.horizontalLayout_2.addLayout(self.horizontalLayout)
            MainWindow.setCentralWidget(self.centralWidget)
            self.menuBar = QtWidgets.QMenuBar(MainWindow)
            self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 26))
            self.menuBar.setObjectName("menuBar")
            MainWindow.setMenuBar(self.menuBar)
            self.mainToolBar = QtWidgets.QToolBar(MainWindow)
            self.mainToolBar.setObjectName("mainToolBar")
            MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
            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", "MainWindow"))
            self.start_button.setText(_translate("MainWindow", "Start"))
            self.stop_button.setText(_translate("MainWindow", "Stop"))
    
    
    class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self):
            super().__init__()
    
            self.setupUi(self)
    
    
    stylesheet = """
        QMainWindow {
            background-image: url("D:/_Qt/img/cat.jpg"); 
            background-repeat: no-repeat; 
            background-position: center;
        }
    """
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        app.setStyleSheet(stylesheet)
    
        w = MyWindow()
    #   MainWindow = QtWidgets.QMainWindow()
    #   ui = Ui_MainWindow()
    #   ui.setupUi(MainWindow)
    #   MainWindow.show()
        w.show()
    
        sys.exit(app.exec_())
    

    【讨论】:

    • 但我正在使用从 qt 设计器导出的 python 文件,这不起作用我不知道如何弄清楚。 https://docs.google.com/document/d/1_ngImp-HYgmQ5tRdseedmuoNo7TX_w9o9Yf9oxyl5Wc/edit?usp=sharing
    • 我在答案中添加了另一个示例。试试看。
    • 漂亮的猫图片!
    • 您好,我遇到了类似的问题,在我的窗口中插入背景图像有困难。我要使用的图像在我的文件资源管理器中,而不是来自网络。请问如何将其导入我的程序?
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 2021-01-17
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2021-05-12
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多