导入Python中的Tkinter时的ImportError

21 投票
3 回答
109792 浏览
提问于 2025-04-17 02:45

我正在尝试用Python 3.2和标准库Tkinter来测试图形用户界面(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

3 个回答

10

把代码改成这样,使用 Tkinter 的小写形式 tkinter,适用于3.x版本:

from tkinter import *

root = Tk()

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

root.mainloop()
20

在3.x版本中,这个模块叫做tkinter,而不是Tkinter

37

问题的根源在于,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对使用通配符导入有这样的建议:

应该避免使用通配符导入(从<module>导入所有内容)

尽管有很多教程忽略了PEP8,但符合PEP8的导入方式应该是这样的:

import tkinter as tk

用这种方式导入时,你需要在所有tkinter命令前加上tk.(比如:root = tk.Tk()等等)。这样做会让你的代码更容易理解,虽然多打了一点字。因为tkinter和ttk常常一起使用,并且它们有相同名称的类,所以这样做是个好主意。正如Python之禅所说:“显式优于隐式”。

注意:as tk这一部分是可选的,但可以让你少打一些字:tk.Button(...)tkinter.Button(...)要简洁一些。

撰写回答