如何为具有良好图形的Python制作.exe?

时间:2010-09-21 20:55:43

标签: python graphics wxpython py2exe

我有一个Python应用程序,我决定使用.exe来执行它。

这是我用来执行.exe:

的代码
# -*- coding: cp1252 -*-
from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')


setup(
    options = {'py2exe': {'bundle_files': 1}},
    windows = [{'script': "SoundLog.py"}],
    zipfile = None,
    packages=[r"C:\Users\Public\SoundLog\Code\Código Python\SoundLog\Auxiliar", r"C:\Users\Public\SoundLog\Code\Código Python\SoundLog\Plugins"],
)

但是当我使用.exe运行我的应用程序时,图形是完全不同的。

在下面的图像中,您可以看到运行思想python的应用程序在左侧,并且运行时认为右侧是.exe。 alt text

如何使.exe与运行思想python的那个一样好?

3 个答案:

答案 0 :(得分:7)

我认为你的意思是工具栏和按钮的视觉风格。您需要将清单文件添加到EXE文件或作为单独的文件,以便Windows应用最近的comctl32.dll版本的现代样式。

在MSDN上查看Using Windows XP Visual Styles With Controls on Windows Forms。阅读有关创建“.exe.manifest”文件的相关部分。

可以在wxPython site找到更多特定于py2exe的教程。他们解释了如何使用setup.py来包含必要的清单文件。

答案 1 :(得分:1)

我安装的最终设置是:

# -*- coding: cp1252 -*-
from distutils.core import setup
import py2exe, sys, os
from glob import glob

sys.argv.append('py2exe')


manifest = """
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
     type='win32'
     name='Microsoft.VC90.CRT'
     version='9.0.21022.8'
     processorArchitecture='*'
     publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         processorArchitecture="*"
         publicKeyToken="6595b64144ccf1df"
         language="*" />
    </dependentAssembly>
  </dependency>
</assembly>
"""

setup(
##    data_files = data_files,
    options = {'py2exe': {'bundle_files': 1}},
    windows = [{'script': "SoundLog.py", 'other_resources': [(24,1,manifest)]}],
    zipfile = None,
    packages=[r"C:\Users\Public\SoundLog\Code\Código Python\SoundLog\Auxiliar", r"C:\Users\Public\SoundLog\Code\Código Python\SoundLog\Plugins"],
)

感谢您的快速回答:)

答案 2 :(得分:0)

当我在Windows 7上使用Python 2.6时,我发现我不需要清单文件。但是当我在XP和Vista上使用Python 2.5时,我确实需要它。如果您使用GUI2Exe,您需要做的就是选中一个小复选框以包含它。

请参阅以下教程:

http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/

http://www.blog.pythonlibrary.org/2010/08/31/another-gui2exe-tutorial-build-a-binary-series/

由于Windows上的编译器切换(即VS2008 vs ye olde VS2003),还有一个与2.6相关的Python相关清单。 Robin Dunn似乎修复了wxPython的最新版本,所以你不需要包含那些烦恼,但是如果你不使用wx,那么当你尝试创建二进制文件时,你可能会遇到这个问题。 py2exe网站和wxPython wiki都讨论了这个问题以及如何创建SxS清单。