【发布时间】:2010-10-19 00:01:56
【问题描述】:
我正在尝试使用 py2exe 将基本的 tkinter GUI 程序转换为 .exe。但是,我在使用以下转换脚本时遇到了错误。
# C:\Python26\test_hello_con.py py2exe
from distutils.core import setup
import py2exe
setup(windows=[r'C:\Python26\py2exe_test_tk.py'])
C:\Python26\py2exe_test_tk.py 为如下代码
import Tkinter as tk
root = tk.Tk()
root.title("Test")
label1 = tk.Label(root,text="Hello!",font=('arial', 10, 'bold'), bg='lightblue')
label1.pack(ipadx=100, ipady=100)
root.mainloop()
这是我尝试运行新创建的 .exe 时遇到的错误
Traceback (most recent call last):
File "py2exe_test_tk.py", line 4, in <module>
File "Tkinter.pyc", line 1643, in __init__
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
{C:/Users/My_Name/lib/tcl8.5} {C:/Users/My_Name/lib/tcl8.5} C:/Users/lib/tcl8.5 {C:/Users/My_Name/library} C:/Users/library C:/Users/tcl8.5.8/library C:/tcl8.5.8/library
This probably means that Tcl wasn't installed properly.
我很确定这是我的转换脚本中的某些东西给我带来了问题。我遗漏了什么?或者有人有一个关于 tkinter GUI 程序的转换脚本是什么样子的例子吗?也可以将输出的 .exe 文件转移到我的桌面吗?
编辑:
错误报告说我缺少来自 {C:/Users/My_name/lib/tcl8.5} 的 init.tcl。所以我创建了那个目录并将 init.tcl 的副本放在那里。现在,当我尝试运行 .exe 时,它指出 MSVCR90.dll 从我的计算机中丢失,需要运行我的程序。
这也是 Windows 7 上的 python 2.6.5。
【问题讨论】:
-
Win7 64 位上的 Python 2.6.4 的 py2exe 和 Python 3.1.2 的 cx_Freeze 都遇到了类似的问题。我发现生成的 dist 目录中没有包含 tcl 子目录(tcl8.5 和 tk8.5)。我将 Python26\tcl 中的两个目录分别复制到 dist\tcl8.6 和 dist\tk8.5,py2exe 生成的二进制文件停止抱怨缺少 tcl。我最终重新安装了 py2exe,问题消失了。现在重新安装 py2exe 后,tcl 目录现在位于 dist\tcl\tcl8.5 和 dist\tcl\tk8.5 下。
标签: python tkinter py2exe msvcrt