2016-07-08 1 views
1

J'ai un programme Python Tkinter, une version réduite qui se trouve ci-dessous:Tkinter NameError que lorsque l'exécution du script shell de

from tkinter import * 
from tkinter.ttk import * 

filedialog.askopenfilename() 

Quand je lance ce script de IDLE, je ne suis pas les erreurs.

Cependant, lorsqu'il est exécuté à partir de PowerShell, en utilisant python myscript.py je reçois

NameError: could not find name 'filedialog' 

de Windows 10 x64 sur une mi-2012 MacBook Pro

+0

Ma réponse ici: https://stackoverflow.com/questions/38806673/importing-from-a-package-in-idle-vs-shell/38808437#38808437 décrit comment réparer les versions IDLE existantes afin qu'elles donnent le bon Erreur. –

+0

@TerryJanReedy Merci d'avoir résolu ce problème! Très appréciée! – JPeroutek

Répondre

1

IDLE est probablement importer déjà, mais en général depuis filedialog est un tkinter module, il ne seront pas importés avec le nu:

from tkinter import * 

Inclure un supplément:

from tkinter import filedialog 

et vous devriez être bon pour aller.

+0

Pourquoi le module filedialog ne serait-il pas inclus dans le *? – JPeroutek

+1

Identique à 'ttk' (que vous incluez déjà séparément), c'est un module. – Feneric

+1

Il s'agit d'un bogue IDLE connu dans idlelib.run. https://bugs.python.org/issue25507 La solution dans tous les cas est d'ajouter l'importation manquante, comme l'a dit Feneric. J'espère faire le refactoring nécessaire avant la 3.6, mais il faut d'abord ajouter des tests pour éviter d'introduire de nouveaux bugs, et peut-être même pire. –