![](/img/trans.png)
[英]When importing tkinter's “messagebox” module, does the “import tkinter.messagebox” syntax not work?
[英]Why does from tkinter import * not import Tkinter's messagebox?
我正在学习 Python,当我使用 tkinter 尝试一些代码时,我遇到了这个问题:
我使用以下行导入 tkinter 的所有定义:
from tkinter import *
然后我尝试打开一个消息框:
messagebox.showinfo(message='My message')
但是当我运行程序时,如果必须执行此行,我会收到以下消息:
Traceback (most recent call last):
File ...
...
NameError: name 'messagebox' is not defined
如果我向导入行添加消息框的显式导入:
from tkinter import *
from tkinter import messagebox
它有效,但我不明白为什么我必须添加这个导入。
messagebox
是一个 模块,例如messagebox.py
。 当您from tkinter import *
时,这不会自动导入命名空间。 自动导入的是tkinter.__init__
定义为__all__
:
__all__ = [name for name, obj in globals().items()
if not name.startswith('_') and not isinstance(obj, types.ModuleType)
and name not in {'wantobjects'}]
请注意, tkinter 甚至明确排除了types.ModuleType
的任何内容,该messagebox
属于该消息框。
如果对这类事情有疑问,您可以随时查看 CPython tkinter Python lib 本身。
Python 文档的Importing * From a Package包含更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.