我使用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。
答案 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重新编译你的代码,你现在应该有你的背景。