据我所知,from module import *
表示模块中的所有内容都可以在本地使用。
在我的代码中,我发现:
from tkinter import *
和
from tkinter import filedialog
回头看,我想我可以放弃这最后一行,但后来它不可用:
NameError: name 'filedialog' is not defined.
我错过了什么?
答案 0 :(得分:1)
据我所知,Tkinter是一个包(意味着它包含其他模块)。从Tkinter import *将只提供默认模块。
来自文档:
<强> 6.4.1。从包中导入*
现在当用户从sound.effects import *中写入时会发生什么?理想情况下,人们希望以某种方式传递给文件系统,找到包中存在哪些子模块,并将它们全部导入。这可能需要很长时间,导入子模块可能会产生不必要的副作用,这种副作用只有在显式导入子模块时才会发生。
唯一的解决方案是让包作者提供包的显式索引。 import语句使用以下约定:如果包的 init .py代码定义了名为 all 的列表,则它将被视为应在导入时导入的模块名称列表从包导入*遇到。在发布新版本的软件包时,由软件包作者决定是否保持此列表的最新状态。如果包装作者没有看到从包装中导入*的用途,他们也可能决定不支持它。例如,文件sound / effects / init .py可能包含以下代码:
请阅读以下帖子,了解您的问题的另一个答案。 filedialog, tkinter and opening files