2014-10-04 83 views
0

我是tkinter的新用户。
我看到视频教程来学习它。
在这个视频,他从tkinter导入该代码:python从tkinter导入ttk和*

from tkinter import * 
from tkinter import ttk 

我知道第一线意味着进口的所有类,函数和...在tkinter和包括ttk必须的。
为什么写第二行时,他全部导入*必须包括ttk
我尝试写第一行和第二删除线,但随后我不能使用这样的代码:

button = ttk.Button(text = "text") 

ttk没有被发现出现错误。 什么时候ttk分别导入不同?以及当我们在第一行使用*时为什么不包括ttk。 谢谢。

+4

因为不是所有的类等都是使用'*'语法导入的,无论在__all__中指定什么都会导入什么 – 2014-10-04 20:24:25

+4

请选择一个站点,不要交叉http://程序员.stackexchange.com/q/258084/110531 – jonrsharpe 2014-10-04 20:26:54

+0

谢谢。 和我删除http://programmers.stackexchange.com/q/258084/110531 – somename 2014-10-04 20:38:17

回答

2

答案很简单:from tkinter import *不会导入ttk,因为这就是它的设计原理。他们为什么这样设计呢?这并不重要。当你创建一个模块时,你可以定义什么是导出和什么不导出,这意味着你不需要导出所有东西。在这种情况下,原始开发人员选择不导出ttk。

在我看来,你不应该做全球进口(例如:from tkinter import *),因为它会让你的程序不太清晰。我建议你这样做:

import tkinter as tk 
from tkinter import ttk 
... 
b1 = tk.Button(...) 
b2 = ttk.Button(...) 

变得晶莹剔透您正在使用的图书馆,在不必为每个小工具的三个额外的字符为代价的。由于代码被读取的次数比写入次数多得多,所以为了可读性进行优化是一件明智的事情。

有关import *如何工作的更多信息,请参阅python 3 tutorial on importing。另请参阅section on importing in PEP8,它不鼓励通配符导入。从该文档:

通配符进口(进口*)应避免使用,因为它们 使它不清楚哪个名字出现在命名空间,混淆 读者和许多自动化的工具。

+0

谢谢。 非常好。 – somename 2014-10-06 18:29:44

-2

从我所知道的,第一行必须足够了,我不认识你的第二个代码的sintax。

对于我来说,它可能看起来像这样的:

from tkinter import * 
window = Tk() 
button = button(window, text="text") 
button.pack() 

我希望我已经回答了你的问题,否则,你可以问我,我会试着从我所知道的回答。

+0

它的工作但不好。 ttk.Button!= Butoon。 和ttk.Button比没有ttk的Butoon美丽。 – somename 2014-10-05 09:20:37

+0

好的,因为您希望我不能回答这些问题,但我建议您阅读@PadraicCunningham对此所说的话。 – cotuex 2014-10-05 14:10:43

+0

我读到了那对我很好。我也读@ user3885927链接,它也很有用。 – somename 2014-10-05 16:36:10