Как подключить изображение находящиеся относительно исполнительного файла?
Я пытаюсь подключить картинку к фону файла:
import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
DIR_PATH = os.path.dirname(os.path.realpath(__file__))
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(800, 800)
url_set = os.path.join(DIR_PATH, "image.png")
print(url_set)
url_qt = QUrl.fromLocalFile(url_set) # +++
print(url_qt)
f1 = r'C:\Users\user\Desktop\test\wid\image.png'
f2 = 'image.png'
url = url_set
url = url_qt
url = f1
url = f2
self.setStyleSheet('''background-image: url({});'''.format(url))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
Но проблема в том что картинку код находит только если она находится в
C:\Users\user\image.png
Вне зависимости от того где находится исполнительный файл
я пробовал подключить через DIR_PATH, QUrl и указав ссылку вручную не помогло.
Could not parse stylesheet of object Window(0x1edeb514230)
Я бы хотел избежать использование функций def paintEvent(), потому-что постоянно создавать новый объект только для того что бы присвоить ему фон как по мне не практично.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
from PyQt5.Qt import *
class Window(QMainWindow):
def __init__(self):
super().__init__()
centralwidget = QWidget()
self.setCentralWidget(centralwidget)
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
lay = QHBoxLayout(centralwidget)
lay.addWidget(button1)
lay.addWidget(button2)
stylesheet = """
QMainWindow {
/* можно так
background-image: url("D:/_Qt/img/cat.jpg");
или так */
background-image: url("img/cat.jpg");
background-repeat: no-repeat;
background-position: center;
}
"""
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyleSheet(stylesheet)
w = Window()
w.resize(490, 370)
w.show()
sys.exit(app.exec_())
Update
А как я могу применить фон к любому другому widgets кроме QMainWindow?
Как вариант:
import sys
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.subWidget = QWidget()
button1 = QPushButton("Button 1", self.subWidget)
button2 = QPushButton("Button 2", self.subWidget)
layH = QHBoxLayout(self.subWidget)
layH.addWidget(button1)
layH.addWidget(button2)
layV = QVBoxLayout(self)
layV.setContentsMargins(0, 0, 0, 0)
layV.addWidget(self.subWidget)
stylesheet = """
.QWidget {
/* можно так
background-image: url("D:/_Qt/img/cat.jpg");
background-repeat: no-repeat;
или так */
background-image: url("img/cat.jpg");
background-position: center;
}
"""
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyleSheet(stylesheet)
w = Window()
w.resize(490, 370)
w.show()
sys.exit(app.exec_())
