【问题标题】:Compiled code does not load image using qrc in pyqt4编译后的代码不使用 pyqt4 中的 qrc 加载图像
【发布时间】:2011-06-01 03:08:15
【问题描述】:

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

这里是示例代码。

界面模块:

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,因为它太长了。 谢谢。

【问题讨论】:

    标签: python pyqt4 py2exe


    【解决方案1】:

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

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

    在尝试此解决方案时,请确保您没有将所有文件捆绑到一个可执行文件中,否则将无法正常工作...

    【讨论】:

      【解决方案2】:

      它是 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 将 . 更改为下划线,因此您必须创建一个带有 .py 扩展名的 resources_rc 文件。

      【讨论】:

      • 感谢 Blender 的回复。是的,它的python QRC。当我在源代码中运行它时,它工作正常。它会加载图像,但是当我使用 py2exe 将其编译为 .exe 并运行它时,图像不会出现
      • 啊,这样更好。我一直对py2exe 有疑问。总是。你试过cx_freeze吗?我自己构建 PyQt4 应用程序,它总是很好地打包它们。
      • 我现在正在尝试 cx_freeze 并正在处理它,但仍然会出现同样的问题。编译后没有图像。我创建了一个 setup.py setup(name = "hello", version = "0.1", description = "thetypical 'Hello, world!' script", executables = [Executable("main.py")]) 就像在文档示例并在命令提示符下作为 setup.py build 运行它
      【解决方案3】:

      我今天遇到了同样的问题。问题很简单,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 重新编译你的代码,你现在应该有你的背景了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-12
        • 2018-12-06
        • 1970-01-01
        • 2013-03-29
        • 2019-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多