我有一个使用cx_freeze冻结的PyQt4程序。我遇到的问题是,当我创建一个QGraphicsPixmapItem,它正在获取它的'像素图由SVG文件制作时,Item没有问题,但是Pixmap没有加载所以没有图像只是场景中的项目。令我困惑的是,只有当我在不同于构建exe的计算机上运行它时,才会发生这种情况。当我在构建它的计算机上运行exe时,程序运行完美。即使我尝试在计算机上安装了所有必需的python组件和pyqt组件的计算机上运行它,如果它不是构建它的计算机,则不会从svg文件加载pixmap。我不确定这是否是我的cx_freeze setup.py文件的问题,或者如果我需要更改主代码中的内容,那么任何帮助或只是指向正确的方向将是伟大的。我的感觉是,当cx_freeze构建它时,某些东西会搞砸,所以我将粘贴下面的setup.py文件的内容。我也使用Python v3.1在Windows上运行。
from cx_Freeze import setup, Executable
files = ['drawings\\FULL', 'drawings\\PANEL', 'data.csv', 'panelData.csv']
binIncludes = ['C:\\Python31\\Lib\\site-packages\\PyQt4\\bin\\QtSvg4.dll']
includes = ['main', 'PunchDialog', 'ArrayDialog', 'PricingDialog', 'FontAndInputDialog', 'PanelSelector', 'PyQt4', 'os', 'sys', 'ctypes', 'csv']
packages = ['drawings']
path = ['C:\\Users\\Brock\\Documents\\Programming\\PanelDesigner\\DrawingFirst', 'C:\\Python31\\Lib', 'C:\\Python31\\Lib\\site-packages', 'C:\\Python31\\DLLs']
setup(
name = 'PanelBuilder',
version = '1.0',
description = 'Allows user to draw custom panel layouts.',
author = 'Brock Seabaugh',
options = {'build_exe': {'packages':packages, 'path':path, 'include_files':files, 'bin_includes':binIncludes, 'includes':includes}},
executables = [Executable('PanelBuilder.py')])
PS。这是我的文件层次结构(如果有帮助的话):
\DrawingFirst
Main .py file
All .py files for all custom dialogs used
\drawings
some modules used
\FULL
A bunch of SVG files used
\PANEL
More SVG files used
答案 0 :(得分:6)
这是我过去遇到的一个令人讨厌的问题。 我引用http://www.py2exe.org/index.cgi/Py2exeAndPyQt: (我知道你使用的是cx_freeze,但我相信你可以调整你的脚本)
PyQt4和图像加载(JPG,GIF, 等)
PyQt4使用插件来读取这些图像 格式,所以你需要复制 文件夹PyQt4 \ plugins \ imageformats to 的 APPDIR 强> \ imageformats。就像在 以上情况,您可以使用data_files 为了这。这不适用 bundle_files on。
如果无法访问插件,那么 QPixmap.load / loadFromData将返回 在那些中加载图像时为假 格式。
testapp.py:
from PyQt4 import QtGui, QtSvg
import sys
app = QtGui.QApplication([])
wnd = QtSvg.QSvgWidget()
wnd.load("flower.svg")
wnd.show()
sys.exit(app.exec_())
setup.py:
from cx_Freeze import setup, Executable
files = ['flower.svg']
includes = ['sip', 'PyQt4.QtCore']
setup(
name = 'Example',
version = '1.337',
description = 'Allows user to see what I did there.',
author = 'something',
options = {'build_exe': {'include_files':files, 'includes':includes}},
executables = [Executable('testapp.py')])
我在Windows 7计算机上创建了此测试应用程序并将其复制到Windows XP计算机上。我没有必要复制任何dll - 它就像那样工作。
答案 1 :(得分:3)
我在cx_freeze
添加了一个包含imageformats
的挂钩,只要原始代码中包含PyQt4.QtGui
。如果imageformats
位于正确的位置,即使是外部存储的图标也能正常工作。
答案 2 :(得分:0)
对于来自谷歌的人:如果你只使用QtWebKit,你做需要将imageformats目录(你在PYTHONDIR \ lib \ site-packages \ PyQt4 \ plugins中找到)复制到你的app dir。在包含中指定PyQt4.QtWebKit是不够的。