我很新并且很困惑。我用tkinter尝试了一个简单的脚本,它在IDLE中运行良好但是当我尝试从CMD启动时 - tkinter窗口打开并且看起来很好,但是当你试图点击任何按钮或文件菜单选项时,AttributeError会引发:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
return self.func(*args)
File "060214_Manual_Evaluation_of_Protein-protein_Cross-Links.py", line 13, in Open_csv
self.CsvPath = tk.filedialog.askopenfilename()
AttributeError: 'module' object has no attribute 'filedialog'
我很感谢任何输入,或者我可以在哪里找到有关IDLE和CMD之间差异的更多信息。
答案 0 :(得分:4)
人们问到python版本,因为tk.filedialog在2.x中拼写不同。但是,我怀疑你的问题是Idle在托管环境中运行代码,掩盖了未正确导入tkinter.filedialog的未发布代码中的错误。为了说明,以下内容来自标准的3.4.2控制台解释器
>>> import tkinter as tk
>>> tk.filedialog
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'filedialog'
以下是Idle's Shell中的相同陈述。
>>> import tkinter as tk
>>> tk.filedialog
<module 'tkinter.filedialog' from 'C:\\Programs\\Python34\\lib\\tkinter\\filedialog.py'>
没有错误的原因是因为Idle已经将filedialog子模块导入为tkinter.filedialog
(在sys.modules中)。如果这也是您的问题,那么您的解决方案是在下面添加导入,并参考&'39; filedialog&#39;没有&#t; tk&#39;前缀。
>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\\Programs\\Python34\\lib\\tkinter\\filedia
log.py'>
>>> filedialog.askopenfilename
<function askopenfilename at 0x0000000000498BF8>
如果这不能解决此问题,请编辑您的问题以添加真正最小的代码示例,并准确说明如何使用Idle和&#39; CMD&#39; (这是Windows上的cmd.exe,还是什么?)。
答案 1 :(得分:0)
这看起来像 IDLE 设置不同的PYTHONPATH,或使用不同的python可执行文件;通过检查两者中的sys.version_info
并比较sys.path
,确保使用相同版本的python。