Python 3.2 Cx_Freeze 无法编译全部 tkinter
我做了一个小计算器,试着用cx_freeze把它打包成可执行文件(.exe)。这个计算器可以计算一些东西,并在消息框中给出答案。在IDLE中运行时一切正常,但当我从.exe文件运行时,虽然Tkinter创建的界面可以打开,但如果我按下计算按钮,应该弹出消息框,却在命令行中出现了以下错误:
‘在Tkinter回调中发生异常 追踪(最近的调用在最后): 文件 "C:\Python32\lib\tkinter__init__.py",第1399行,在 call return self.func(*args) 文件 "calculator1.pyw",第46行,在 energyKinetic NameError: 全局名称 'messagebox' 未定义’
我使用了以下的'setup.py':
from cx_Freeze import setup, Executable
setup(
name = 'Kinetic Energy Calculator',
version = '0.1',
description = 'Calculate',
executables = [Executable('calculator1.pyw')],
)
然后在命令提示符下用 'C:\Python32>python setup.py build' 来运行它。
这个计算器的代码其实就是简单的Tkinter界面,有按钮、标签、输入框和消息框,所以我觉得没必要在这里贴出来,除非有人觉得我需要这样做。 那么,我在setup.py中有没有什么重要的东西没有写,导致它无法正确打包呢?
2 个回答
0
你还忘了加上基础选项:
setup(
name = 'Kinetic Energy Calculator',
version = '0.1',
description = 'Calculate',
executables = [Executable('calculator1.pyw', base="Win32GUI")]
)
虽然这样还是不能正常工作,但现在 tkinter 会被识别出来了。
2
你需要用tkinter来创建自定义的消息框,因为在你尝试启动程序时,除了按F5键,默认的消息框似乎是不存在的。换句话说,你无法解决这个问题,只能自己创建新的窗口。