【问题标题】:Why does from tkinter import * not import Tkinter's messagebox?为什么 from tkinter import * 不导入 Tkinter 的消息框?
【发布时间】:2021-07-03 13:23:15
【问题描述】:

我正在学习 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

它有效,但我不明白为什么我必须添加这个导入。

【问题讨论】:

标签: python python-3.x tkinter python-import


【解决方案1】:

messageboxmodule,例如messagebox.py。当您from tkinter import * 时,这不会自动导入命名空间。 自动导入的是tkinter.__init__defines as __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 属于其中。

如果对这类事情有疑问,您可以随时check out the CPython tkinter Python lib itself

Python 文档的Importing * From a Package 包含更多详细信息。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多