Paul Hannell
Paul Hannell

Reputation: 79

Adding a Background image with PyQt5

I'm trying to add a background using the answers from previous questions.

Sadly they don't work and return errors, either stylesheet, or the = sign, or the """.

I think it may be my location of the image? Is there something special required to store the image perhaps or something else I'm missing?

I've shown an edited down version of the code.

Thanks

import sys
from PyQt5.QtWidgets import QApplication,  QWidget,  QLabel, QMainWindow, QPushButton, QAction
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import pyqtSlot
import os
os.chdir(r'C:\Users\Paul Hannell\python_files')

class App(QMainWindow):      # Opening Window

    def __init__(self):
        super().__init__()
        self.title = "Timelord Timer PyQt5"
        self.left = 70
        self.top = 100
        self.width = 1170
        self.height = 740
        self.initUI()


    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setWindowIcon(QIcon(r'C:\Users\Paul Hannell\python_files\Timelord.ico'))
        self.statusBar().showMessage('Message in Status Bar')
        label=QLabel(self)

        ############################
        # Background Image

        self.centralwidget = QWidget()
        self.setCentralWidget(self.centralwidget)
        lay = QHBoxLayout(self.centralwidget)

stylesheet = '''
    MainWindow {
        background-image: url(r'C:\Users\Paul Hannell\python_files\Running_Around4.png');
        background-repeat: no-repeat;
        background-position: center;
    }
'''

        #####################################

mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu('File')
settingsMenu = mainMenu.addMenu('Settings')
resultsMenu = mainMenu.addMenu('Results')
reportsMenu = mainMenu.addMenu('Reports')
infoMenu = mainMenu.addMenu('Info')

newButton=QAction('New', self)
newButton.setStatusTip('New Race')
        #newButton.triggered.connect(self.create)    #This open new event options
fileMenu.addAction(newButton)

openButton = QAction('Open' , self)
openButton.setStatusTip('Open File')
        #openButton.triggered.connect(self.open)  # This will open existing
fileMenu.addAction(openButton)

deleteButton=QAction('Delete', self)
deleteButton.setStatusTip('Delete Race')
        #deleteButton.triggered.connect(self.create)    #This delete existing event.
fileMenu.addAction(deleteButton)

exitButton=QAction('Exit', self)
exitButton.setStatusTip('Exit application')
exitButton.triggered.connect(self.close)
fileMenu.addAction(exitButton)



self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

Upvotes: 0

Views: 5716

Answers (1)

Demi-Lune
Demi-Lune

Reputation: 1967

Your code is badly indented (and too long) so it's hard to tell, but I see several issues:

  • it shoud be #MainWindow in the style sheet (you're missing a #)
  • you need to name the App with this name: self.setObjectName('MainWindow')
  • you need to use setStyleSheet at some point
  • the url needs fixing: no quotes nor 'r'; simply the file name (maybe the space in the file name needs escaping, you could try to play with it)

This, for instance, works:

import sys
from PyQt5.QtWidgets import QApplication,  QWidget,  QLabel, QMainWindow, QPushButton, QAction


class App(QMainWindow):      # Opening Window
    def __init__(self):
        super().__init__()
        self.setWindowTitle('hello bg')

        self.setObjectName('MainWindow')

        stylesheet = '''
    #MainWindow {
        background-image: url(/home/me/photos/DSC_0001.jpg);
        background-repeat: no-repeat;
        background-position: center;
    }
'''        
        self.setStyleSheet(stylesheet)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

Upvotes: 1

Related Questions