使用cx_freeze后QGraphicsPixmapItem不显示

2 投票
1 回答
570 浏览
提问于 2025-04-16 14:08

我在使用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 个回答

5

我找到我问题的答案了。原来问题不在QGraphicsPixmapItem这个类,而是在应用程序的QtSvg部分。这让我有点困惑,因为cx_freeze生成的输出显示QtSvg模块在创建可执行文件时是包含的,但这并不是程序所需的全部。程序还需要qt.conf这个文件。解决这个问题我只需要去找qt.conf文件,路径是'...\Python31\Lib\site-packages\PyQt4\bin\qt.conf',然后把这个文件复制到你应用程序的可执行文件所在的目录,搞定!

撰写回答