Python3的tkinter的导入问题

为什么有了from tkinter import *这句导入后还要再加上这句from tkinter import messagebox导入才能使用messagebox的方法呢?第一句不是已经将tkinter的所有函数和类都导入进来了吗?
希望各位大神详细解答下,万分感谢。

阅读 5.8k
2 个回答

如果py文件中没有定义__all__,import * 会导入所有的符号;
如果定义了__all__,只会import __all__中申明的符号。
比如:

# test.py
a = 1
b = 2

>> from test import *
>> a
1
>> b
2

# test.py
__all__ = ['a']
a = 1
b = 2

>> from test import *
>> a
1
>> b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined

并不是所有模块都是全导入的
messagebox默认不导入,需要指定导入。


解释一下~

包导入的过程和模块的基本一致,只是导入包的时候会执行此包目录下的__init__.py而不是模块里面的语句了。另外,如果只是单纯的导入包,而包的__init__.py中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。

Python3\Lib\tkinter tkinter是个,也就是含有__init__.py的文件夹。
tkinter具体导入的什么,去看__init__.py的内容即可知道了~
__init__.py里没有导入messagebox.py,所以,需要另外指定导入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题