我有一个使用tkinter
和tkinter.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
时似乎也会出现同样的问题。
答案 0 :(得分:1)
您必须导入from tkinter import filedialog
我不知道为什么,但如果您只是from tkinter import *
或import tkinter
它将无效。