带有 cx_freeze 的 python 3.2 tkinter 图标

Posted

技术标签:

【中文标题】带有 cx_freeze 的 python 3.2 tkinter 图标【英文标题】:python 3.2 tkinter icon with cx_freeze 【发布时间】:2013-08-21 13:50:05 【问题描述】:

我正在使用这个,当我启动 python 脚本时它工作正常

root.wm_iconbitmap('icon.ico')

但在使用 cx_freeze 编译脚本并尝试执行编译后的文件后,我收到以下错误消息

File "D:\Programme\Python\Lib\tkinter\__init__.py", line 1553, in wm_iconbitmap
return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: bitmap "icon.ico" not defined

所以找不到图标文件。 如何配置我的 setup.py 以包含图标文件?

【问题讨论】:

How can i bundle other files when using cx_freeze?的可能重复 另见文档中的using data files。 【参考方案1】:

我不知道你是否解决了这个问题(考虑到这个问题有多老),但我遇到了和你完全相同的问题,感谢你的问题,它实际上解决了我的问题。

为了包含您的图标文件(或 Python 程序调用的任何其他文件),您在 setup.py 脚本中创建一个名为 includefiles 的变量,然后在 setup( 代码中包含 options

下面是我用来执行此操作的setup.py 脚本。

import sys
from cx_Freeze import setup, Executable

base = None
if (sys.platform == "win32"):
    base = "Win32GUI"

exe = Executable(
        script = "Binary to Decimal Converter.py",
        icon = "python-xxl.ico",
        targetName = "Binary to Decimal Converter.exe",
        base = base
        )
includefiles = ["python-xxl.ico"]

setup(
    name = "Binary to Decimal Converter",
    version = "0.1",
    description = "Converts Binary values to Decimal values",
    author = "Neeraj Morar",
    options = 'build_exe': 'include_files':includefiles,
    executables = [exe]
)

如您所见,includefiles 包含我的图标文件名(我应该提醒您将该文件与您的 Python 脚本放在同一目录中)。然后,在setup( 代码中我有options = 'build_exe': 'include_files':includefiles

'include_files' 调用我创建的 includefiles 变量。

本质上,你需要做的就是和我做同样的事情,但是不要把我的图标文件名放在你的图标文件名中;即includefiles = ["icon.ico"]

【讨论】:

现在工作了。 _tkinter.TclError Could not open \C:\Users\Name\AppData\Local\Programs\AppName\library.zip\icon.png. No such file or directory 有什么办法解决这个问题吗? @ajinzrathod 似乎您的文件路径看起来不正确,它似乎将您的 C: 驱动器视为子文件夹,因为路径开头有 `\`。在没有看到您的代码的情况下,如果您将图标放在与 Python 脚本相同的目录中,并且只需引用名称“icon.png”,它应该可以工作。 哦,对不起。我忘了提。我使用了python setup.py bdist_msi 并创建了 MSI 安装程序。我还创建了一个桌面快捷方式。所以当我从桌面打开时,它不起作用。但它确实从应用程序所在的根目录工作

以上是关于带有 cx_freeze 的 python 3.2 tkinter 图标的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.2:cx_freeze 编译我的程序,但处于调试模式

使用 cx_Freeze 创建一个带有 Python 3.4 的 exe

Cx_freeze 不适用于带有 Python 3.6.2 的 Win 10

带有 cx_Freeze 的 Pyserial 运行时错误

cx_freeze 使 selenium 无法在 python 中截屏

cx_Freeze:Python 错误主脚本。找不到模块错误:没有名为 pygments.lexers.python 的模块