转换为py2exe可执行文件后缺少tkinter属性

时间:2015-03-08 23:10:53

标签: tkinter python-3.3 py2exe

我有一个使用tkintertkinter.filedialog的Python 3.3脚本。后者用于其中一个类的特定行:

self.root_folder = os.path.realpath(tk.filedialog.askdirectory(**self.dir_opt))

代码在IDLE中运行良好。但是,在使用py2exe转换为二进制可执行文件后,程序会运行,但在尝试调用命名行时会引发以下异常:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__
    return self.func(*args)
  File "analyzer.py", line 403, in load_files
  File "analyzer.py", line 388, in select_root
AttributeError: 'module' object has no attribute 'filedialog'

setup.py

from distutils.core import setup
import py2exe

setup()
setup(
    console=['analyzer.py'],
    options={
        'py2exe': 
        {'includes': ['lxml.etree', 'lxml._elementpath', 'tkinter', 'tkinter.filedialog'],
         }
    }
)

我检查了IDLE和二进制版本中tkinter.__dict__的内容。可执行文件确实缺少filedialog属性,以及其他一些属性。例如:

**IDLE**          **EXE**
_varnum           _varnum
colorchooser        
commondialog      
constants         constants
dialog            
filedialog        
font              
getboolean        getboolean
getdouble         getdouble
getint            getint
image_names       image_names 
image_types       image_types
mainloop          mainloop
messagebox        
re                re

我做错了什么?我非常感谢你的帮助。

PS。尝试cx_Freeze时似乎也会出现同样的问题。

1 个答案:

答案 0 :(得分:1)

您必须导入from tkinter import filedialog我不知道为什么,但如果您只是from tkinter import *import tkinter它将无效。