2016-07-08 23 views
1

Ich habe ein Tkinter Python-Programm bekommt, eine reduzierte Version von denen gefunden werden kann unter:Tkinter Nameerror nur, wenn Skript von Shell läuft

from tkinter import * 
from tkinter.ttk import * 

filedialog.askopenfilename() 

Wenn ich dieses Skript ausführen von IDLE, ich bekomme nicht Fehler.

Wenn jedoch von Powershell ausführen, mit python myscript.py ich

NameError: could not find name 'filedialog' 

Windows-10 X 64 auf Mitte 2012 MacBook Pro

+0

Meine Antwort hier: https://stackoverflow.com/questions/38806673/importing-from-a-package-in-idle-vs-shell/38808437#38808437 beschrieben, wie Sie bestehende IDLE-Releases beheben, so dass sie das richtige geben Error. –

+0

@TerryJanReedy Danke für die Reparatur! Sehr geschätzt! – JPeroutek

Antwort

1

IDLE wahrscheinlich ist es bereits zu importieren, aber im Allgemeinen, da filedialog ein tkinter Modul wird es nicht mit dem bloßen importiert werden:

from tkinter import * 

Fügen sie ein extra:

und Sie sollten gut gehen.

+0

Warum sollte das filialialog Modul nicht im * enthalten sein? – JPeroutek

+1

Selben wie 'ttk' (das Sie bereits separat einschließen), es ist ein Modul. – Feneric

+1

Dies ist ein bekannter IDLE-Fehler in idleLib.run. https://bugs.python.org/issue25507 Die Lösung ist in allen Fällen, den fehlenden Import hinzuzufügen, wie Feneric sagte. Ich hoffe, das nötige Refactoring vor Version 3.6 durchführen zu können, muss aber zunächst Tests hinzufügen, um neue und vielleicht noch schlimmere Bugs zu vermeiden. –