2014-10-04 89 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