在Python中加载模块时出现意外行为

时间:2013-08-14 15:50:43

标签: python python-3.x module tkinter

据我所知,from module import *表示模块中的所有内容都可以在本地使用。

在我的代码中,我发现:

from tkinter import *

from tkinter import filedialog

回头看,我想我可以放弃这最后一行,但后来它不可用:

NameError: name 'filedialog' is not defined.

我错过了什么?

1 个答案:

答案 0 :(得分:1)

据我所知,Tkinter是一个包(意味着它包含其他模块)。从Tkinter import *将只提供默认模块。

来自文档:

<强> 6.4.1。从包中导入*

  

现在当用户从sound.effects import *中写入时会发生什么?理想情况下,人们希望以某种方式传递给文件系统,找到包中存在哪些子模块,并将它们全部导入。这可能需要很长时间,导入子模块可能会产生不必要的副作用,这种副作用只有在显式导入子模块时才会发生。

     

唯一的解决方案是让包作者提供包的显式索引。 import语句使用以下约定:如果包的 init .py代码定义了名为 all 的列表,则它将被视为应在导入时导入的模块名称列表从包导入*遇到。在发布新版本的软件包时,由软件包作者决定是否保持此列表的最新状态。如果包装作者没有看到从包装中导入*的用途,他们也可能决定不支持它。例如,文件sound / effects / init .py可能包含以下代码:

请阅读以下帖子,了解您的问题的另一个答案。 filedialog, tkinter and opening files