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

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以及pyqtv4。

最佳答案

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

10-06 14:19