Не импортируются иконки из .qrc в .py
Я создала интерфейс в Qt Designer, в нем использовала файл ресурсов resource.qrc для иконок в приложении.
Сохранила .ui из Designer в файл .py,
затем конвертировала resource.qrc в rc_resource.py с помощью команды:
pyside6-rcc resource.qrc -o rc_resource.py
Сразу скажу, что в PyQt5 точно такая же проблема.
Однако, когда я пытаюсь из Main файла запустить приложение выдается ошибка:
"ModuleNotFoundError: No module named 'rc_resource'".
Импорт в файле ui_MainWindow есть, но явно происходит что-то не так.
Если я убираю импорт rc_resource и заменяю путь к иконкам напрямую в папку, где они хранятся, а не в qrc, иконки все равно не видны.
ui_MainWindow и rc_resource хранятся в одной папке.
Помогите, решить проблему. https://github.com/Masik84/my_prog
resource.qrc
<RCC>
<qresource prefix="icons">
<file>Icons/minus.png</file>
<file>Icons/alignleft2.png</file>
...
<file>Icons/x.png</file>
</qresource>
</RCC>
ui_MainWindow.py
from PySide6.QtWidgets import (QApplication, QFrame, QHBoxLayout, QMainWindow,
QPushButton, QSizePolicy, QVBoxLayout, QWidget)
import rc_resource
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
...
Main.py
import sys
from PySide6 import QtCore, QtGui
from PySide6.QtGui import QColor
from PySide6.QtWidgets import QMainWindow, QDialog, QApplication, QGraphicsDropShadowEffect
from screens.ui_MainWindow import *
class Welcome_Screen(QMainWindow):
def __init__(self):
super(Welcome_Screen,self).__init__()
self.animation = None
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Welcome_Screen()
sys.exit(app.exec_())
Ответы (1 шт):
Замените в модуле ui_MainWindow.py
import rc_resource
на
import screens.rc_resource
Main.py
import sys
'''
from PySide6 import QtCore, QtGui
from PySide6.QtGui import QColor
from PySide6.QtWidgets import QMainWindow, QDialog, QApplication, QGraphicsDropShadowEffect
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from screens.ui_MainWindow import Ui_MainWindow
class Welcome_Screen(QMainWindow):
def __init__(self):
super(Welcome_Screen, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.animation = None
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Welcome_Screen()
window.show()
sys.exit(app.exec_())
ui_MainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(835, 572)
MainWindow.setAutoFillBackground(True)
MainWindow.setStyleSheet("")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setAutoFillBackground(False)
self.centralwidget.setStyleSheet("")
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout")
self.header = QtWidgets.QFrame(self.centralwidget)
self.header.setMinimumSize(QtCore.QSize(0, 0))
self.header.setMaximumSize(QtCore.QSize(16777215, 50))
self.header.setAutoFillBackground(False)
self.header.setStyleSheet(".QFrame#header{\n"
"background-color: qlineargradient(spread:pad, x1:0.1, y1:0.215909, x2:0.959, y2:0.909091, stop:0 rgba(52, 146, 35, 255), stop:1 rgba(195, 244, 101, 255));\n"
"}")
self.header.setFrameShape(QtWidgets.QFrame.NoFrame)
self.header.setFrameShadow(QtWidgets.QFrame.Raised)
self.header.setLineWidth(0)
self.header.setObjectName("header")
self.hboxlayout = QtWidgets.QHBoxLayout(self.header)
self.hboxlayout.setContentsMargins(0, 0, 0, 0)
self.hboxlayout.setSpacing(0)
self.hboxlayout.setObjectName("hboxlayout")
self.top_left_menu = QtWidgets.QFrame(self.header)
self.top_left_menu.setMinimumSize(QtCore.QSize(0, 0))
self.top_left_menu.setMaximumSize(QtCore.QSize(45, 50))
self.top_left_menu.setStyleSheet("QFrame#top_left_menu{\n"
"background-color: qlineargradient(spread:pad, x1:0, y1:0.506, x2:1, y2:0.5, stop:0 rgba(52, 146, 35, 255), stop:1 rgba(195, 244, 101, 255));\n"
"}\n"
"\n"
"QPushButton{\n"
" border-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" background-color: rgb(93, 183, 42);\n"
"}")
self.top_left_menu.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.top_left_menu.setFrameShadow(QtWidgets.QFrame.Raised)
self.top_left_menu.setObjectName("top_left_menu")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.top_left_menu)
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_3.setSpacing(0)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.main_menu_btn = QtWidgets.QPushButton(self.top_left_menu)
self.main_menu_btn.setMinimumSize(QtCore.QSize(45, 50))
self.main_menu_btn.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.main_menu_btn.setStyleSheet("")
self.main_menu_btn.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icons/Icons/menu2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.main_menu_btn.setIcon(icon)
self.main_menu_btn.setIconSize(QtCore.QSize(24, 24))
self.main_menu_btn.setObjectName("main_menu_btn")
self.horizontalLayout_3.addWidget(self.main_menu_btn)
self.hboxlayout.addWidget(self.top_left_menu)
self.frame = QtWidgets.QFrame(self.header)
self.frame.setMaximumSize(QtCore.QSize(16777215, 50))
self.frame.setFrameShape(QtWidgets.QFrame.NoFrame)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.hboxlayout.addWidget(self.frame)
self.top_right_btn = QtWidgets.QFrame(self.header)
self.top_right_btn.setMaximumSize(QtCore.QSize(100, 50))
self.top_right_btn.setStyleSheet("QPushButton{\n"
" border-radius: 5px;\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" background-color: rgb(93, 183, 42);\n"
"}")
self.top_right_btn.setFrameShape(QtWidgets.QFrame.NoFrame)
self.top_right_btn.setFrameShadow(QtWidgets.QFrame.Raised)
self.top_right_btn.setObjectName("top_right_btn")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.top_right_btn)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setSpacing(0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.restore_btn = QtWidgets.QPushButton(self.top_right_btn)
self.restore_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.restore_btn.setText("")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/icons/Icons/minus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.restore_btn.setIcon(icon1)
self.restore_btn.setIconSize(QtCore.QSize(24, 24))
self.restore_btn.setObjectName("restore_btn")
self.horizontalLayout_2.addWidget(self.restore_btn)
self.min_size_btn = QtWidgets.QPushButton(self.top_right_btn)
self.min_size_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.min_size_btn.setText("")
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/icons/Icons/maximize2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.min_size_btn.setIcon(icon2)
self.min_size_btn.setIconSize(QtCore.QSize(24, 24))
self.min_size_btn.setObjectName("min_size_btn")
self.horizontalLayout_2.addWidget(self.min_size_btn)
self.close_btn = QtWidgets.QPushButton(self.top_right_btn)
self.close_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
# !!! ------------------------------------------------> v
self.close_btn.setStyleSheet("QPushButton {border-radius: 10px;}")
self.close_btn.setText("")
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/icons/Icons/x.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.close_btn.setIcon(icon3)
self.close_btn.setIconSize(QtCore.QSize(24, 24))
self.close_btn.setObjectName("close_btn")
self.horizontalLayout_2.addWidget(self.close_btn)
self.hboxlayout.addWidget(self.top_right_btn)
self.verticalLayout.addWidget(self.header)
self.central_part = QtWidgets.QFrame(self.centralwidget)
self.central_part.setFrameShape(QtWidgets.QFrame.NoFrame)
self.central_part.setFrameShadow(QtWidgets.QFrame.Raised)
self.central_part.setObjectName("central_part")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.central_part)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.left_menu = QtWidgets.QFrame(self.central_part)
self.left_menu.setMaximumSize(QtCore.QSize(45, 16777215))
self.left_menu.setStyleSheet("QFrame#left_menu{\n"
" background-color: qlineargradient(spread:pad, x1:0, y1:0.506, x2:1, y2:0.5, stop:0 rgba(52, 146, 35, 255), stop:1 rgba(195, 244, 101, 255));\n"
"}\n"
"\n"
"QPushButton{\n"
" padding: 20px 10px;\n"
" border: none;\n"
" border-radius: 10px;\n"
" color: #000000\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" background-color: rgb(93, 183, 42);\n"
"}")
self.left_menu.setFrameShape(QtWidgets.QFrame.NoFrame)
self.left_menu.setFrameShadow(QtWidgets.QFrame.Raised)
self.left_menu.setLineWidth(0)
self.left_menu.setObjectName("left_menu")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.left_menu)
self.verticalLayout_2.setContentsMargins(7, 0, 0, 0)
self.verticalLayout_2.setSpacing(0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.home_btn = QtWidgets.QPushButton(self.left_menu)
self.home_btn.setMinimumSize(QtCore.QSize(110, 0))
self.home_btn.setStyleSheet("background-image: url(:/icons/Icons/home6.png);\n"
"font: 700 11pt \"Segoe UI\";\n"
"color: rgb(139, 0, 0);\n"
"background-repeat: none;\n"
"padding-left: 45px;\n"
"background-position: center left;")
self.home_btn.setObjectName("home_btn")
self.verticalLayout_2.addWidget(self.home_btn)
self.bonus_btn = QtWidgets.QPushButton(self.left_menu)
self.bonus_btn.setMinimumSize(QtCore.QSize(110, 0))
self.bonus_btn.setStyleSheet("background-image: url(:/icons/Icons/bonuses2.png);\n"
"font: 700 11pt \"Segoe UI\";\n"
"color: rgb(139, 0, 0);\n"
"background-repeat: none;\n"
"padding-left: 45px;\n"
"background-position: center left;")
self.bonus_btn.setIconSize(QtCore.QSize(16, 16))
self.bonus_btn.setObjectName("bonus_btn")
self.verticalLayout_2.addWidget(self.bonus_btn)
self.invoice_btn = QtWidgets.QPushButton(self.left_menu)
self.invoice_btn.setMinimumSize(QtCore.QSize(110, 0))
self.invoice_btn.setStyleSheet("background-image: url(:/icons/Icons/invoices.png);\n"
"font: 700 11pt \"Segoe UI\";\n"
"color: rgb(139, 0, 0);\n"
"background-repeat: none;\n"
"padding-left: 43px;\n"
"background-position: center left;")
self.invoice_btn.setObjectName("invoice_btn")
self.verticalLayout_2.addWidget(self.invoice_btn)
self.client_btn = QtWidgets.QPushButton(self.left_menu)
self.client_btn.setMinimumSize(QtCore.QSize(110, 0))
self.client_btn.setStyleSheet("background-image: url(:/icons/Icons/customers.png);\n"
"font: 700 11pt \"Segoe UI\";\n"
"color: rgb(139, 0, 0);\n"
"background-repeat: none;\n"
"padding-left: 45px;\n"
"background-position: center left;")
self.client_btn.setObjectName("client_btn")
self.verticalLayout_2.addWidget(self.client_btn)
self.product_btn = QtWidgets.QPushButton(self.left_menu)
self.product_btn.setMinimumSize(QtCore.QSize(110, 0))
self.product_btn.setStyleSheet("background-image: url(:/icons/Icons/products2.png);\n"
"font: 700 11pt \"Segoe UI\";\n"
"color: rgb(139, 0, 0);\n"
"background-repeat: none;\n"
"padding-left: 45px;\n"
"background-position: center left;")
self.product_btn.setObjectName("product_btn")
self.verticalLayout_2.addWidget(self.product_btn)
self.horizontalLayout.addWidget(self.left_menu)
self.main_part = QtWidgets.QFrame(self.central_part)
self.main_part.setAutoFillBackground(False)
self.main_part.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.194037, y1:0.821, x2:0.534, y2:0.422619, stop:0.0105263 rgba(44, 146, 25, 255), stop:1 rgba(195, 244, 101, 255));\n"
"background-position: center;\n"
"background-repeat: no-repeat;\n")
# ???"background-size: 100%")
self.main_part.setFrameShape(QtWidgets.QFrame.NoFrame)
self.main_part.setFrameShadow(QtWidgets.QFrame.Raised)
self.main_part.setLineWidth(0)
self.main_part.setObjectName("main_part")
self.horizontalLayout.addWidget(self.main_part)
self.verticalLayout.addWidget(self.central_part)
self.futter_menu = QtWidgets.QFrame(self.centralwidget)
self.futter_menu.setMaximumSize(QtCore.QSize(16777215, 50))
self.futter_menu.setStyleSheet("QFrame#futter_menu{\n"
" background-color: qlineargradient(spread:pad, x1:0.1, y1:0.215909, x2:0.959, y2:0.909091, stop:0 rgba(52, 146, 35, 255), stop:1 rgba(195, 244, 101, 255));\n"
"}\n"
"\n"
"")
self.futter_menu.setFrameShape(QtWidgets.QFrame.NoFrame)
self.futter_menu.setFrameShadow(QtWidgets.QFrame.Raised)
self.futter_menu.setLineWidth(0)
self.futter_menu.setObjectName("futter_menu")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.futter_menu)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setSpacing(0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.frame_2 = QtWidgets.QFrame(self.futter_menu)
self.frame_2.setMaximumSize(QtCore.QSize(16777215, 50))
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_2.setObjectName("frame_2")
self.horizontalLayout_4.addWidget(self.frame_2)
self.frame_3 = QtWidgets.QFrame(self.futter_menu)
self.frame_3.setMaximumSize(QtCore.QSize(150, 50))
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame_3.setObjectName("frame_3")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.frame_3)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.back_btn = QtWidgets.QPushButton(self.frame_3)
self.back_btn.setMinimumSize(QtCore.QSize(0, 27))
self.back_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.back_btn.setStyleSheet("QPushButton{\n"
" border-radius: 5px;\n"
" font: 700 10pt \"Segoe UI\";\n"
" color: rgb(139, 0, 0);\n"
" background-color: qlineargradient(spread:pad, x1:0.1, y1:0.215909, x2:0.959, y2:0.909091, stop:0 rgba(52, 146, 35, 255), stop:1 rgba(195, 244, 101, 255));\n"
"}\n"
"\n"
"QPushButton:hover {\n"
" background-color: rgb(93, 183, 42);\n"
"}")
self.back_btn.setObjectName("back_btn")
self.horizontalLayout_5.addWidget(self.back_btn)
self.horizontalLayout_4.addWidget(self.frame_3)
self.verticalLayout.addWidget(self.futter_menu)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.home_btn.setText(_translate("MainWindow", "HOME"))
self.bonus_btn.setText(_translate("MainWindow", "Bonus"))
self.invoice_btn.setText(_translate("MainWindow", "Invoice"))
self.client_btn.setText(_translate("MainWindow", "Clients"))
self.product_btn.setText(_translate("MainWindow", "Product"))
self.back_btn.setText(_translate("MainWindow", "Back"))
# !!! vvvvvvvv <------------------------------------------------------------- !!!
import screens.rc_resource
