使用 cx_freeze 后不会出现 QGraphicsPixmapItem

Posted

技术标签:

【中文标题】使用 cx_freeze 后不会出现 QGraphicsPixmapItem【英文标题】:QGraphicsPixmapItem won't appear after using cx_freeze 【发布时间】:2011-03-21 21:27:50 【问题描述】:

在使用 cx_freeze 构建应用程序后,我无法理解为什么我的 QGraphicsPixmapItem 没有显示。该类和 cx_freeze 是否存在任何已知问题,或者我是否缺少 cx_freeze 的某些设置?这是创建和显示 QGraphicsPixmapItem 的部分,之后是我的 cx_freeze 的 setup.py:

def partNo_changed(self):
    self.scene.removeItem(self.previewItem)
    partNumber = self.ui.partNo.text()
    fileLocation = 'drawings\\FULL\\%s.svg' % partNumber
    print(fileLocation)
    pixmap = QtGui.QPixmap(fileLocation)
    self.previewItem = QtGui.QGraphicsPixmapItem(pixmap)
    self.previewItem.setPos(0, 0)
    self.scene.addItem(self.previewItem)
    self.ui.svgPreview.centerOn(self.previewItem)

这里是 setup.py 脚本:

from cx_Freeze import setup, Executable

files = ['drawings\\FULL']

setup(
        name = 'DBManager',
        version = '1.0',
        description = 'Makes and maintains the .csv database files.',
        author = 'Brock Seabaugh',
        options = 'build_exe': 'include_files':files, 'bin_path_includes':files,
        executables = [Executable('dbManager_publicDB.py')])

程序中的所有其他东西都可以正常工作,这是唯一不工作的事情(如果我只运行 .py 脚本就可以工作,但在我运行 exe 时就不行)。构建或运行 exe 时没有任何错误。如果有人可以提供帮助,那就太好了。我正在使用 Python v3.1 和 cx_freeze v4.2.3 和 PyQt v4。

【问题讨论】:

【参考方案1】:

所以我找到了我的问题的答案。显然问题不在于 QGraphicsPixmapItem 类,而在于应用程序的 QtSvg 部分。这让我很失望,因为 cx_freeze 的输出显示在创建可执行文件时包含了 QtSvg 模块,但这并不是程序所需要的全部。它还需要 qt.conf 文件。为了解决这个问题,我所要做的就是在 '...\Python31\Lib\site-packages\PyQt4\bin\qt.conf' 找到 qt.conf 文件,并将该文件复制到应用程序可执行文件所在的目录是的,瞧,它的工作原理!

【讨论】:

还有一个问题需要注意,我已经在另一个帖子中回答过,但仍然与这个主题有关。如果您打算将此可执行文件放在另一台没有 PyQt4 的计算机上(很明显),您还必须将您使用的 PyQt 的图像格式 .dll 文件复制到应用程序文件夹中。你需要做的是从你的exe文件中获得dll文件的相对地址,如下所示:'PyQt4/plugins/imageformats/qsvg4.dll'。然后你必须将你的qt.conf文件中的Prefix编辑为PyQt4而不需要全部其他的东西。一旦你这样做了,你应该能够将它移动到任何带有(out)PyQt4 的 Windows 组件。

以上是关于使用 cx_freeze 后不会出现 QGraphicsPixmapItem的主要内容,如果未能解决你的问题,请参考以下文章

tkinter 程序使用 cx_Freeze 编译,但程序不会启动

qgraph:更改图形类型时如何修复节点位置?

cx_freeze 不会创建元数据?

使用 cx_Freeze 将 Python 转换为 exe 时 Scipy 和 Cython 出现 AttributeError

使用 cx_freeze 时,运行 exe 时不会加载

cx_Freeze Exe 应用程序一打开就关闭