2014-10-04 3 views
3

Поскольку «MessageBox» представляет собой модуль в пакете «Tkinter», почему я должен использоватьПри импорте модуля «messagebox» tkinter, синтаксис «import tkinter.messagebox» не работает?

from tkinter import messagebox 

вместо

import tkinter.messagebox 

Я был под впечатлением, что импортировать модуль в пакета я должен был бы использовать следующий синтаксис:

import package_name.module_name 

Спасибо за помощь.

+1

Да, вообще говоря, вы правы: 'messagebox' - это модуль в пакете' tkinter', и с любым нормальным модулем Python вы должны иметь возможность импортировать его с помощью синтаксиса. Тем не менее, похоже, что tkinter делает некоторую магию при импорте (возможно, какое-то кэширование), возможно, по причинам использования производительности/памяти. Обратите внимание, например, что если вы * first * do 'из tkinter import messagebox', а затем' import tkinter.messagebox', второй синтаксис действительно работает. –

+0

Также попробуйте 'import tkinter' и сравните' dir (tkinter) 'перед тем, как вы делаете' из tkinter import messagebox' и после. Итак, чтобы подвести итог: ваше понимание модулей и пакетов Python является правильным, это определенная странность Tkinter. –

+0

... а потом у вас есть 'import tkMessageBox' – joaquin

ответ

1

Импорт tkinter.messagebox делает работу (по крайней мере, должны, и не в 3.4, может быть, может быть ошибка в других версиях), но он импортируется как tkinter.messagebox, который долго и утомительно писать, и если остальная часть tkinter используется, это бессмысленно делать, поскольку tkinter.messagebox будет уже косвенно импортирован. Так что вообще from tkinter import messagebox считается более легким, и он не потеряет много, если есть читаемость.

Смежные вопросы