2015-04-23 114 views
7

我的问题与此已经回答的问题(Missing tkinter attributes after converting to py2exe executable)非常相似。但它涉及使用Tkinter而不是tkinter的python 2.7。py2exe - 编译Tkinter gui可执行文件后缺少模块FileDialog

我基本上有编译后运行我的可执行文件相同的问题。

Traceback (most recent call last): 
    File "main.py", line 5, in <module> 
    File "gui.pyc", line 5, in <module> 
    File "matplotlib\backends\backend_tkagg.pyc", line 7, in <module> 
    File "six.pyc", line 199, in load_module 
    File "six.pyc", line 113, in _resolve 
    File "six.pyc", line 80, in _import_module 
ImportError: No module named FileDialog 

但由于我使用的Tkinter与Python 2.7就意味着我不能做:

from tkinter import FileDialog 

我曾尝试使用

from tkFileDialog import askopenfilename 

import tkFileDialog 

但没有工作。我是否需要将python升级到3才能正确编译Tkinter?或者是否有我失踪的解决方法?

这是我目前setup.py

from distutils.core import setup 
from glob import glob 
import py2exe 
import sys 
import matplotlib 

sys.path.append("C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\redist\\x86\\Microsoft.VC90.CRT") 

data_files = [("Microsoft.VC90.CRT", 
      glob(r'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC90.CRT\*.*'))] 
data_files.extend(matplotlib.get_py2exe_datafiles()) 

setup(
    data_files=data_files, 
    windows=['main.py'], 
    packages=[''], 
    name='ZLA', 
    version='0.1 beta', 
    description='Troubleshooter.', 
    requires=['matplotlib', 'PIL', 'py2exe'] 
) 

我试图在选项来指定tkFileDialog:包括:但仍没有运气:(

options={'py2exe': {'includes': ['Tkinter', 'tkFileDialog']}, } 

UPDATE:

我发现一些调查后的答案,你实际上可以只是

import FileDialog 

UPDATE2:

如果你想避免“未使用的导入”反馈一些调试器和IDE的给你,你可以在包的FileDialog在代替

options={'py2exe': {'packages': ['FileDialog']},} 

也许有人添加到py2exe的包装词典可以帮助澄清为什么更合适?

+0

更新2为我工作得很好。谢谢。 –

回答

2

而不是使用“包含”使用“包”,只指定包,在这种情况下,'Tkinter'。

+0

谢谢你的回复!不幸的是,你的答案似乎并不适用于我。我得到了相同的进口商错误 – djoe

+1

我相信问题是FileDialog是/是Tkinter的一个单独的包,我刚刚在包中使用FileDialog而不是Tkinter测试了解决方案,并且能够编译。我会更新这个问题,并且我感谢你指引我走向正确的方向:) – djoe