我正在尝试使用带有标准库Tkinter的Python 3.2测试GUI代码,但是无法导入该库。
这是我的测试代码:
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
问题的根源是Tkinter模块Tkinter在python 2.x中被命名为(大写“ T”),tkinter在python 3.x中被命名为(小写“ t”)。
Tkinter
tkinter
为了使您的代码在Python 2和3中都能正常工作,您可以执行以下操作:
try: # for Python2 from Tkinter import * except ImportError: # for Python3 from tkinter import *
但是,PEP8对于通配符导入有这样的说法:
应避免通配符导入(来自 import *)
尽管有无数的教程忽略了PEP8,但兼容PEP8的导入方式如下所示:
import tkinter as tk
以这种方式导入时,您需要为所有tkinter命令加上前缀tk.(例如:root = tk.Tk()等)。这将使您的代码更易于理解,但要付出一点点输入。鉴于tkinter和ttk经常一起使用,并且导入名称相同的类,这是一件好事。正如python的禅宗所言:“显式优于隐式”。
tk.
root = tk.Tk()
注意:该as tk部分是可选的,但可以让您少打字:tk.Button(...)vstkinter.Button(...)
as tk
tk.Button(...)
tkinter.Button(...)