繁体   English   中英

为什么 from tkinter import * 不导入 Tkinter 的消息框?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM