py2exe与QSplashScreen

2 投票
2 回答
1081 浏览
提问于 2025-04-16 20:56

我想在PyQT4应用程序中添加一个启动画面(QSplashScreen)。在Python中运行时一切正常,但当我用py2exe创建exe文件时,启动画面就看不见了,应用程序等了2秒后直接显示主窗口。这是怎么回事呢?

应用程序代码:

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)

    # Create and display the splash screen
    splash_pix = QPixmap('images/splash.jpg')
    splash = QSplashScreen(splash_pix, QtCore.Qt.WindowStaysOnTopHint)
    splash.setMask(splash_pix.mask())
    splash.show()
    app.processEvents()

    time.sleep(2)

    myapp = Main()
    myapp.show()
    splash.finish(myapp)
    sys.exit(app.exec_())

setup.py:

#!/usr/bin/env python

from py2exe.build_exe import py2exe
from distutils.core import setup

setup(name='-',
      version='1.0',
      description='-',
      author='-',
      author_email='-',
      windows=[{"script": "main.py"}],
      data_files=[
                ('phonon_backend', [
                    'C:\Python26\Lib\site-packages\PyQt4\plugins\phonon_backend\phonon_ds94.dll'
                    ]),
                  'settings.yaml',
                  ('images', ['images/accept.png',
                              'images/splash.jpg',

                              ]),
                  'loader.png',
                  'licence.txt',
                  'about.txt',
                  ],
     )

2 个回答

1

你可能需要QT的qjpeg4.dll文件。试着把下面这个文件夹复制到:

<python-dir>\Lib\site-packages\PyQt4\plugins\imageformats

这个文件夹里,也就是py2exe生成的exe文件所在的文件夹。

如果你是从Riverbank网站下载的PyQt4安装包安装的,文件应该就在那。如果你用的是其他的安装方式,那就自己找找吧。

2

PNG格式的支持是默认有的,而JPEG格式的支持需要通过一个插件来实现,这个插件需要以某种方式包含进来。

最近在PySide的邮件列表上有个讨论,关于使用cx_freeze的类似问题,具体内容可以查看这个链接:http://lists.pyside.org/pipermail/pyside/2010-December/001656.html。对于PyQt4和py2exe,解决方案大致是相同的。

那里的最终解决方案基本上是这样的:

在生成的.exe文件旁边,放一个名为qt.conf的文件,内容如下:

[Paths]
Plugins = plugins

(你可以使用其他的值,而不是“plugins”,只需将子目录名称改成相应的即可。)

创建一个名为plugins的子目录,然后在里面再创建一个名为imageformats的子目录。把qjpeg4.dll文件复制到这里。这个文件通常在路径C:\Python27\Lib\site-packages\PyQt4\plugins\imageformats下。

撰写回答