编译代码不会在pyqt4中使用qrc加载图像

时间:2011-06-01 03:08:16

标签: python pyqt4 py2exe

我使用pyqt4创建了一个程序,因为我使用了资源文件或.qrc来加载背景图像。 我的问题是当我使用py2exe编译它时,没有加载背景图像。

这是示例代码。

GUI MODULE:

from PyQt4 import QtCore, QtGui
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(563, 319)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setStyleSheet(_fromUtf8("background-image: url(:/test/mr_bean_kid.jpg);"))
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 563, 18))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))

import ss_rc

主要模块:

from sample import Ui_MainWindow
from PyQt4 import QtCore, QtGui


class test(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    myapp = test()
    myapp.show()
    sys.exit(app.exec_())

我不会包含qrc因为它很长。 THX。

3 个答案:

答案 0 :(得分:1)

它是Python QRC吗?

我的应用程序有一个Makefile,可以动态地重新生成.ui文件和.qrc文件中的代码:

<强>生成文件

all:
    rm -fv *.pyc
    pyuic4 -i 2 -o gui.py gui.ui
    pyrcc4 -o resources_rc.py resources.qrc
    python2 main.py

在Qt Designer中,指定资源文件。对我来说,它是resources.rc。但是Python将.更改为下划线,因此您必须创建一个resources_rc扩展名为.py的文件。

答案 1 :(得分:1)

您可以在本页底部找到问题的解决方案。

http://www.py2exe.org/index.cgi/Py2exeAndPyQt

尝试此解决方案时,请确保您没有将所有文件捆绑到单个可执行文件中,这将无效...

答案 2 :(得分:0)

我今天遇到了同样的问题。问题只是py2exe无法识别“jpg”格式图像。您的背景图片必须是“png”文件。您可以通过修改例如使用paint修改图像的格式来更改它,然后将此图像添加到“resourcefilename.qrc”。然后你重新编译它。不要忘记更改python代码中的链接:

QtGui.QDialog.setStyleSheet(_fromUtf8("QDialog{background-image: url(:/image/**'imagename'.jpg**);}"))

QtGui.QDialog.setStyleSheet(_fromUtf8("QDialog{background-image: url(:/image/**'imagename'.png**);}"))

然后,你只需要用py2exe重新编译你的代码,你现在应该有你的背景。