2011-09-21 66 views
18

我試圖用標準庫Tkinter測試使用Python 3.2的GUI代碼,但我無法導入庫。在Python中導入Tkinter時導入錯誤

這是我的測試代碼:

from Tkinter import * 

root = Tk() 
w = Label(root, text="Hello, world!") 
w.pack() 
root.mainloop() 

外殼報告這個錯誤:

Traceback (most recent call last): 
File "<pyshell#9>", line 1, in <module> 
from Tkinter import * 
ImportError: No module named Tkinter 

回答

27

問題的根源在於,所述的Tkinter模塊Tkinter(大寫的 「T」)在Python 2命名.x和tkinter(小寫「t」)在python 3.x.

爲了使你的代碼工作都Python 2和3,你可以做這樣的事情:

try: 
    # for Python2 
    from Tkinter import * 
except ImportError: 
    # for Python3 
    from tkinter import * 

然而,PEP8有此說關於通配符進口:

Wildcard imports (from <module> import *) should be avoided

儘管忽略PEP8的無數教程,符合PEP8標準的導入方式如下:

import tkinter as tk 

以這種方式導入時,需要在所有tkinter命令前加上tk.(例如:root = tk.Tk()等)。這會讓你的代碼更容易理解,而不會花費更多的打字工作。考慮到tkinter和ttk經常一起使用並導入同名的類,這是一件好事。正如Zen of python所述:「明確優於隱含」。

注:as tk部分是可選的,但可以讓你做一個少打字:tk.Button(...) VS tkinter.Button(...)

15

該模塊被稱爲tkinter,不Tkinter,在3.x的

8

重寫代碼爲tkinter(小寫)與Tkinter遵循3.X:

from tkinter import * 

root = Tk() 

w = Label(root, text="Hello, world!") 
w.pack() 

root.mainloop()