2015-04-23 17 views
7

Moje pytanie jest bardzo podobne do tego, na które już udzielono odpowiedzi (Missing tkinter attributes after converting to py2exe executable). Ale dotyczy on python 2.7, który używa Tkintera, zamiast tkintera.py2exe - brakujący moduł FileDialog po skompilowaniu pliku wykonywalnego GUI Tkinter

Zasadniczo mam ten sam problem z uruchomieniem mojego pliku wykonywalnego po kompilacji.

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 

Ale jak Używam Tkinter z Pythona 2.7, oznacza to, że nie można zrobić:

from tkinter import FileDialog 

Próbowałem, używając

from tkFileDialog import askopenfilename 

i

import tkFileDialog 

ale żaden nie zadziałał. Czy mam do czynienia z uaktualnieniem Pythona do 3, aby móc poprawnie skompilować Tkintera? Czy istnieje obejście, którego mi brakuje?

To jest mój obecny 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'] 
) 

Próbowałem określić tkFileDialog w opcji: obejmuje: ale nadal nie szczęścia :(

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

UPDATE:

znalazłem odpowiedź po pewnym dochodzeniu.Tak właściwie można

import FileDialog 

Update2:

Jeśli chcesz uniknąć „niewykorzystana przywóz” feedback kilka debugery i IDE daje, można dodać pakiet FileDialog do słownika pakiety py2exe zamiast

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

Może ktoś może pomóc wyjaśnić, dlaczego jeden z nich jest bardziej odpowiedni?

+0

Aktualizacja 2 sprawdziła się bardzo dobrze. Dziękuję Ci. –

Odpowiedz

2

Zamiast używać "zawiera", użyj "pakietów" i określ tylko pakiet, w tym przypadku "Tkinter".

+0

Dziękuję za odpowiedź! Niestety twoja odpowiedź nie działa dla mnie. Mam ten sam importerror – djoe

+1

Wierzę, że problem polega na tym, że FileDialog był/jest oddzielnym pakietem od Tkintera, właśnie przetestowałem twoje rozwiązanie, używając FileDialog zamiast Tkintera w paczkach, i udało mi się skompilować. Zaktualizuję pytanie i dziękuję za skierowanie mnie we właściwym kierunku :) – djoe