【问题标题】:Tkinter NameError only when running script from shellTkinter NameError 仅在从 shell 运行脚本时
【发布时间】:2016-07-08 23:25:24
【问题描述】:

我有一个 Tkinter Python 程序,可以在下面找到它的简化版本:

from tkinter import *
from tkinter.ttk import *

filedialog.askopenfilename()

当我从 IDLE 运行此脚本时,我没有收到任何错误。

但是,当从 PowerShell 运行时,使用 python myscript.py 我得到了

NameError: could not find name 'filedialog'

2012 年中期 MacBook Pro 上的 Windows 10 x64

【问题讨论】:

  • 我在这里的回答:stackoverflow.com/questions/38806673/… 描述了如何修复现有的 IDLE 版本,以便它们给出正确的错误。
  • @TerryJanReedy 感谢您解决此问题!非常感谢!

标签: python tkinter python-idle nameerror filedialog


【解决方案1】:

IDLE 可能已经在导入它,但一般来说,由于 filedialog 是一个 tkinter 模块,它不会被裸导入:

from tkinter import *

包括一个额外的:

from tkinter import filedialog

你应该很高兴。

【讨论】:

  • 为什么filedialog模块不包含在*中?
  • ttk 相同(您已经单独包含),它是一个模块。
  • 这是 idlelib.run 中的一个已知 IDLE 错误。 bugs.python.org/issue25507 正如 Feneric 所说,所有情况下的解决方案都是添加缺少的导入。我希望在 3.6 之前进行必要的重构,但必须先添加测试以避免引入新的甚至更糟糕的错误。
  • Q&A 说服了我完成这个问题。从 3.5.3 和 3.6.0a4 开始,“from tkinter import *; filedialog”将在 IDLE 运行时引发相应的 NameError。
猜你喜欢
  • 2018-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2013-07-29
相关资源
最近更新 更多