2015-07-21 2 views
0

Я изучаю python для начала, я делаю несколько учебников и видеоуроков. Я использую возвышенный текст 3 для отжима кода и консоль sublimeREPL для запуска файлов и кода. Несколько дней назад мне пришлось искать в Интернете, как сделать sublimeREPL для запуска в качестве запуска IDLE 3, и я сделал это.Мне нужно знать, в чем разница между tkinter import * и tkinter import 'module'

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

from tkinter import * 
colorchooser.askcolor() 

и это работает, но когда я код, который , он не работает. ошибка говорит:

Traceback (most recent call last): File "", line 1, in NameError: name 'colorchooser' is not defined

мне нужно код:

from tkinter import colorchooser 
colorchooser.askcolor() 

и она работает.

Мне просто нужно знать, почему мне нужно это делать так? И почему это не работает для меня в первую очередь?

Я не английский. Я старался изо всех сил.

+0

Кажется, что версия python в видео отличается (вероятно, старше), чем ваша. Это работает для вас: 'from tkinter import *' 'tkinter.colorchooser.askcolor()'? Взгляните на https://docs.python.org/3.5/library/tkinter.html. – 0xc0de

+0

Какое видео вы смотрите? –

+0

версия на видео это 3.3.3 и i usin 3.4.3, я попробовал, если форма tkinter import * tkinter.colorchooser.askcolor(), и она не работает -> NameError: name 'tkinter' не определен –

ответ

1

С

from tkinter import colorchooser 

импортируемого (суб) модуляcolorchooser (плюс его переменные и функции) от package (который представляет собой структурированный модуль) tkinter.

Packages are a way of structuring Python’s module namespace by using “dotted module names”.

Так модуль tkinter структурирован следующим образом:

tkinter/ 
    colorchooser/ 
     askcolor() 
     ... 

С from tkinter import * вы importing all methods and variables от tkinter (на самом деле всех государственных объектов не начинающиеся с _) , но не его подмодулями, это почему эти два метода не являются одинаковыми:

... the statement from sound.effects import * does not import all submodules from the package sound.effects into the current namespace

(source)

Вы можете, однако (хотя многие сказали бы from ... import * плохая практика)

from tkinter.colorchooser import * 
0

от tkinter import * не работает, потому что вам нужен весь каталог tkinter. Вот почему вы должны указать модуль colorchooser для работы вашей программы.

0

Я не уверен, где вы видели, но colorchooser всегда был модуль внутри tkinter и него не импортируются, когда вы делаете -

from tkinter import * 

вы должны специально импортировать его с помощью -

from tkinter import colorchooser 

Как вы уже заметили.