2015-04-23 7 views
7

Мой вопрос почти такой же, как этот уже ответили на вопрос (Missing tkinter attributes after converting to py2exe executable). Но это относится к python 2.7, который использует Tkinter вместо tkinter.py2exe - отсутствует модуль FileDialog после компиляции исполняемого файла Tkinter gui

В основном у меня такая же проблема, когда исполнялся мой исполняемый файл после компиляции.

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:

Если вы хотите, чтобы избежать «неиспользуемые импорта» обратной связи некоторые отладчики и язь дадим вам, вы можете добавить пакет FileDialog словарю пакеты py2exe вместо

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

Возможно, кто-то может помочь выяснить, почему это более уместно?

+0

Обновление 2 работало очень хорошо для меня. Спасибо. –

ответ

2

Вместо использования «включает» использовать «пакеты» и указывать только пакет, в данном случае «Tkinter».

+0

Благодарим вас за ответ! К сожалению, ваш ответ, похоже, не работает для меня. Я получаю тот же importerror – djoe

+1

Я считаю, что проблема в том, что FileDialog был/является отдельным пакетом от Tkinter, я только что протестировал ваше решение с помощью FileDialog вместо Tkinter в пакетах и ​​смог скомпилировать. Я уточню вопрос, и я благодарю вас за то, что указали мне в правильном направлении :) – djoe

Смежные вопросы