当在 CMD 中 运行 时,脚本因 AttributeError 失败,但在 IDLE 中执行正常
Script fails with AttributeError when run in CMD, but executes fine in IDLE
我很新很困惑。我用 tkinter 尝试了一个简单的脚本,它在 IDLE 中运行良好,但是当我尝试从 CMD 启动它时 - tkinter window 打开并且看起来不错,但是当您尝试单击任何按钮或文件菜单选项时出现 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 之间差异的更多信息。
这看起来像 IDLE 设置了不同的 PYTHONPATH,或者使用了不同的 python 可执行文件;通过检查两者的 sys.version_info
并比较 sys.path
.
确保使用相同版本的 python
人们询问 python 版本是因为 tk.filedialog 在 2.x 中的拼写不同。但是,我怀疑您的问题是托管环境中的空闲 运行s 代码掩盖了未正确导入 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 的 Shell.
中的相同语句
>>> import tkinter as tk
>>> tk.filedialog
<module 'tkinter.filedialog' from 'C:\Programs\Python34\lib\tkinter\filedialog.py'>
没有错误的原因是因为Idle已经将filedialog子模块导入为tkinter.filedialog
(在sys.modules中)。如果这也是你的问题,一个解决方案是在下面添加导入并参考没有 'tk' 前缀的 'filedialog'。
>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Programs\Python34\lib\tkinter\filedia
log.py'>
>>> filedialog.askopenfilename
<function askopenfilename at 0x0000000000498BF8>
如果这不能解决此问题,请编辑您的问题以添加真正最小的代码示例并准确解释您如何 运行 同时使用 Idle 和 'CMD'(这是 cmd.exe在 Windows 上,还是什么?)。
我很新很困惑。我用 tkinter 尝试了一个简单的脚本,它在 IDLE 中运行良好,但是当我尝试从 CMD 启动它时 - tkinter window 打开并且看起来不错,但是当您尝试单击任何按钮或文件菜单选项时出现 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 之间差异的更多信息。
这看起来像 IDLE 设置了不同的 PYTHONPATH,或者使用了不同的 python 可执行文件;通过检查两者的 sys.version_info
并比较 sys.path
.
人们询问 python 版本是因为 tk.filedialog 在 2.x 中的拼写不同。但是,我怀疑您的问题是托管环境中的空闲 运行s 代码掩盖了未正确导入 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 的 Shell.
中的相同语句>>> import tkinter as tk
>>> tk.filedialog
<module 'tkinter.filedialog' from 'C:\Programs\Python34\lib\tkinter\filedialog.py'>
没有错误的原因是因为Idle已经将filedialog子模块导入为tkinter.filedialog
(在sys.modules中)。如果这也是你的问题,一个解决方案是在下面添加导入并参考没有 'tk' 前缀的 'filedialog'。
>>> from tkinter import filedialog
>>> filedialog
<module 'tkinter.filedialog' from 'C:\Programs\Python34\lib\tkinter\filedia
log.py'>
>>> filedialog.askopenfilename
<function askopenfilename at 0x0000000000498BF8>
如果这不能解决此问题,请编辑您的问题以添加真正最小的代码示例并准确解释您如何 运行 同时使用 Idle 和 'CMD'(这是 cmd.exe在 Windows 上,还是什么?)。