使用Tkinter的Py2exe

4 投票
4 回答
5532 浏览
提问于 2025-04-16 05:42

我正在尝试使用py2exe将一个基本的tkinter图形界面程序转换成.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图形界面程序的转换脚本示例?另外,能不能把生成的.exe文件放到我的桌面上?

编辑:

错误报告说我缺少init.tcl,它应该在{C:/Users/My_name/lib/tcl8.5}这个路径下。所以我创建了那个目录,并把init.tcl的副本放在那里。现在当我尝试运行.exe时,它提示我缺少MSVCR90.dll,这个文件是运行我的程序所必需的。

另外,我使用的是Windows 7上的Python 2.6.5。

4 个回答

0

py2exe这个工具在处理模块时不太好用。我听说有一个叫c_freeze的工具,它似乎可以处理模块,你可以试试这个? http://cx-freeze.sourceforge.net/

1

我在virtualenv网站上发现了一个bug,建议的解决办法是:

对于Windows用户,去你的目录"C:\Environments\VirtualEnv\Scripts\activate.bat"这个文件里,添加一些内容,确保TCL和TK的路径设置正确,与你的Python版本相匹配。

set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
set "TK_LIBRARY=C:\Python27\tcl\tk8.5"

然后重启你的命令提示符或者终端。

当我遇到这个错误时,这个方法对我非常有效。

2

对于你最初的问题,我不能确切说出问题是什么,但通常通过尝试和错误的方法来猜测缺少的文件和文件夹是有帮助的。如果你知道缺少什么,就把它们添加到你的 packages(用于 Python 模块)或 data_files(用于其他文件)中。

第二个问题是因为一些 C 模块(还有 Python 本身)是用 MS Visual Studio 构建的,因此需要依赖 MS Visual C++ 9.0(2008)运行时。你可以通过以下两种方式解决这个问题:

  • 拥有一个 Visual Studio 的副本(Express 版不算),这样你就可以重新分发 MSVCR 的依赖项(前提是你禁止用户对这些依赖部分进行逆向工程等操作)。

  • 引导你的用户去下载 MS Visual C++ 2008 Redistributable 包,这个包可以在微软官网找到。

撰写回答