首页 文章

在CMD中运行时脚本失败并出现AttributeError,但在IDLE中执行正常

提问于
浏览
3

我很新,很困惑 . 我用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之间差异的更多信息 .

2 回答

  • 0

    这看起来像IDLE设置不同的PYTHONPATH,或使用不同的python可执行文件;通过检查两者的 sys.version_info 并比较 sys.path ,确保使用相同版本的python .

  • 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 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'运行(在Windows上是这个cmd.exe,还是什么?) .

相关问题