我需要知道从tkinter导入*和tkinter导入'模块'之间的区别是什么

问题描述:

我是学习Python的开始,我正在做一些教程和视频教程。我使用崇高的文本3来打印代码,并使用sublimeREPL的控制台来运行文件和代码。 几天前,我不得不在网上搜索如何使sublimeREPL运行为空闲3运行,我做到了。我需要知道从tkinter导入*和tkinter导入'模块'之间的区别是什么

现在的问题是,在教训我在做什么,现在他们教会了我如何使用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版本与您的版本不同(可能更老)。这是否适合你:'从tkinter import *''tkinter.colorchooser.askcolor()'? 查看https://docs.python.org/3.5/library/tkinter.html。 – 0xc0de

+0

你看哪个视频? –

+0

视频上的版本它是3.3.3和我usin 3.4.3,我试图如果表单tkinter导入* tkinter.colorchooser.askcolor(),它不起作用 - > NameError:名称'tkinter'未定义 –

随着

from tkinter import colorchooser 
package

要导入的(子)模块colorchooser(加上它的变量和函数)(这是一个结构化的模块)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 variablestkinter(其实所有的公共对象无法启动与_),而不是它的子模块,这为什么这两种方法不一样:

... 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 * 

来自tkinter import *不起作用,因为您需要整个tkinter目录。 这就是为什么你必须指定colorchooser模块为你的程序工作。

我不知道你在哪里看到了这一点,但colorchooser一直是一个模块内tkinter和它当你没有得到进口 -

from tkinter import * 

你必须明确使用导入 -

from tkinter import colorchooser 

正如您已经观察到的那样。