2011-09-21 123 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()