簡體   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