People asked about python version because tk.filedialog is spelled differently in 2.x. However, I suspect that your problem is that Idle runs code in a managed environment that masks a bug in your unposted code of not properly importing tkinter.filedialog. To illustrate, the follow is from the standard 3.4.2 console interpreter
>>> import tkinter as tk
>>> tk.filedialog
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'filedialog'
Here are the same statements in Idle's Shell.
>>> import tkinter as tk
>>> tk.filedialog
<module 'tkinter.filedialog' from 'C:\Programs\Python34\lib\tkinter\filedialog.py'>
The reason that there is no error is because Idle has already imported the filedialog submodule as tkinter.filedialog
(in sys.modules). If this is your problem also, a solution for you is to add the import below and refer to 'filedialog' without the 'tk' prefix.
>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Programs\Python34\lib\tkinter\filedia
log.py'>
>>> filedialog.askopenfilename
<function askopenfilename at 0x0000000000498BF8>
If this does not solve this issue, edit your question to add a truly minimal code example and explain exactly how you run both with Idle and 'CMD' (is this cmd.exe on Windows, or what?).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…