在 Python 中导入 Tkinter 时出现 ImportError [重复]

Posted

技术标签:

【中文标题】在 Python 中导入 Tkinter 时出现 ImportError [重复]【英文标题】:ImportError when importing Tkinter in Python [duplicate] 【发布时间】:2011-11-21 20:32:44 【问题描述】:

我正在尝试使用带有标准库 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

【问题讨论】:

【参考方案1】:

问题的根源在于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 对通配符导入有这样的说法:

应避免通配符导入( from import * )

尽管有无数教程忽略了 PEP8,但符合 PEP8 的导入方式是这样的:

import tkinter as tk

以这种方式导入时,需要在所有 tkinter 命令前加上tk. 前缀(例如:root = tk.Tk() 等)。这将使您的代码更容易理解,但会花费更多的输入。鉴于 tkinter 和 ttk 经常一起使用并导入具有相同名称的类,这是一件好事。正如Zen of python 所说:“显式优于隐式”。

注意:as tk 部分是可选的,但可以让您少输入一些内容:tk.Button(...) vs tkinter.Button(...)

【讨论】:

【参考方案2】:

该模块在 3.x 中称为 tkinter,而不是 Tkinter

【讨论】:

【参考方案3】:

将代码改写如下,将Tkinter改写为tkinter(小写)3.x:

from tkinter import *

root = Tk()

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

root.mainloop()

【讨论】:

以上是关于在 Python 中导入 Tkinter 时出现 ImportError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 python 2.7 中导入 zipfile 模块时出现语法错误

在 Python 3 中导入模块时出现 AttributeError

在python 2.7中导入熊猫时出现“ValueError:未知语言环境:UTF-8” [重复]

Python:尝试从同一包中导入模块时出现“ModuleNotFoundError”

在 django 中导入设置时出现奇怪的错误

在 Jython 的 Pig UDF 中导入外部库时出现错误 1121