我正在尝试使用带有标准库Tkinter的Python 3.2测试GUI代码,但我无法导入库。
这是我的测试代码:
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
shell报告此错误:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
from Tkinter import *
ImportError: No module named Tkinter
答案 0 :(得分:30)
问题的根源是Tkinter模块在python 2.x中被命名为Tkinter
(大写“T”),在python 3.x中被命名为tkinter
(小写“t”)。
要使您的代码在Python 2和3中都能正常工作,您可以执行以下操作:
try:
# for Python2
from Tkinter import *
except ImportError:
# for Python3
from tkinter import *
但是,PEP8有关于通配符导入的说法:
应避免使用通配符导入(来自&lt; module&gt; import *)
尽管无数教程忽略了PEP8,但符合PEP8标准的导入方式如下:
import tkinter as tk
以这种方式导入时,您需要为所有tkinter命令添加前缀tk.
(例如:root = tk.Tk()
等)。这将使您的代码更容易理解,代价是更多的打字。鉴于tkinter和ttk经常一起使用并导入具有相同名称的类,这是一件好事。正如Zen of python所述:“显性优于隐性”。
注意:as tk
部分是可选的,但可以减少输入:tk.Button(...)
vs tkinter.Button(...)
答案 1 :(得分:16)
该模块在3.x中被称为tkinter
,而不是Tkinter
。
答案 2 :(得分:9)
如下所示,将代码重写为Tkinter
为tkinter
(小写),代码为3.x:
from tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()