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