python从tkinter导入ttk和*

时间:2014-10-04 20:06:34

标签: python python-3.x

我是tkinter中的新人 我看到了视频教程来学习它 在此视频中,他使用以下代码从tkinter导入:

from tkinter import *
from tkinter import ttk

我知道第一行意味着导入tkinter中的所有课程,功能和...并且必须包含ttk
为什么在导入所有必须包含* ttk的所有内容时写下第二行 我尝试写第一行并删除第二行,但后来我不能使用这样的代码:

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

并收到错误ttk未找到。 ttk导入分开时有什么不同?以及我们在第一行使用ttk时未包含*的原因。 谢谢。

2 个答案:

答案 0 :(得分: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,它不鼓励使用通配符。从该文件:

  

应该避免使用通配符导入(来自import *)   不清楚命名空间中存在哪些名称,令人困惑   读者和许多自动化工具。

答案 1 :(得分:-2)

据我所知,必须要考虑第一行,并且我没有认识到你的第二段代码的sintax。

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

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

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