2014-10-04 16 views
3

既然“消息框”是​​在“Tkinter的”包模块,为什么我不得不使用当导入tkinter的“messagebox”模块时,“import tkinter.messagebox”语法不起作用吗?

from tkinter import messagebox 

,而不是

import tkinter.messagebox 

我的印象是,内导入模块下一个包,我将不得不使用以下语法:

import package_name.module_name 

感谢您的帮助。

+1

是的,一般来说你是正确的:'messagebox'是'tkinter'包中的一个模块,并且对于任何普通的Python模块,你都应该可以用任何语法导入它。但是,似乎tkinter在导入时会产生一些魔力(可能是某种缓存),可能是出于性能/内存使用的原因。注意,例如,如果你首先从tkinter导入消息框执行'然后'导入tkinter.messagebox',那么第二个语法确实可以工作。 – 2014-10-04 16:21:44

+0

也可以尝试'导入tkinter',并在做'从tkinter导入消息箱'之后和之后比较一个'dir(tkinter)'。总结一下:你对Python模块/包和导入的理解是正确的,这是Tkinter特有的一些奇怪现象。 – 2014-10-04 16:23:36

+0

...然后你有'import tkMessageBox' – joaquin 2014-10-04 16:55:54

回答

1

导入tkinter.messagebox做工作(至少应该和它在3.4,也许有可能是在其他版本中的错误),但它导入为tkinter.messagebox,这是繁琐和冗长的写了,如果正在使用tkinter的其余部分,则无意做,因为tkinter.messagebox已经被间接导入。所以一般认为from tkinter import messagebox更容易,并且不会有太大的松动,如果有可读性的话。

相关问题