【问题标题】:from Tkinter import * ImportError: No module named 'Tkinter'从 Tkinter 导入 * ImportError:没有名为“Tkinter”的模块
【发布时间】:2019-02-06 09:58:49
【问题描述】:

我在 Windows 中使用 PyCharm,我已经通过 Anaconda 以及 tkinter 模块下载了 Python 3.5.5 和所有其他库。在此之前,我一直在使用它来解决任何问题。上次我安装了 live Streamer 库。我认为这会导致问题。尝试资本和小型:

from Tkinter import * , from tkinter import * , 
root = tk(), root = Tk(), root = tk.Tk(), root = tk.Tk(), root = Tk.tk()
root = TK.TK()

这是我在 PyCharm 中运行的代码:

from tkinter import *
import tkinter

top = Tk()

def helloCallBack():
   print( "Hello Python", "Hello World")

B = tkinter.Button(top, text ="Hello", command = helloCallBack)

B.pack()
top.mainloop()

这些都不起作用

【问题讨论】:

  • 简单的答案是您尝试在第一行导入Tkinter。这将引发错误,因为您的 python 版本需要导入 tkinter 全部小写。你不能只是把所有可能的导入选项都放在那里,然后寄希望于最好的结果。如果您导入不存在的内容,则会出错。删除import tkinter 行上方的所有内容并将其更改为import tkinter as tk,然后为小部件使用tk. 前缀。

标签: python tkinter


【解决方案1】:

好的。首先:

你不应该做的事情:

在生产环境中,如果您不确定一个模块是否以一种方式调用(这可能取决于安装的 Python 版本),您不应该像这样将所有导入放在一起,因为如果一个模块失败了将引发导入错误,这将使您的运行时崩溃。执行以下操作:

try:
    import Tkinter

except ImportError:  # Python 3.x present
    import tkinter

但是,在您的情况下,您已经知道您拥有 Python 3,所以这不是问题。只需使用正确的(继续阅读下一部分)。

建议您做什么:

如果您使用的是 Python 2.x:

模块被命名为Tkinter。你可以做from Tkinter import * 和Tk 将被导入。

如果您使用的是 Python 3.x:

模块被命名为tkinter。注意小写。你必须做import tkinter;并使用tkinter.Tk

基本原理

您可能希望从已发布在 SO 上的此答案中阅读此片段:

但是,PEP8 对通配符导入有这样的说法:

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

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

import tkinter as tk

这种方式导入的时候,需要给所有的tkinter命令加上前缀 与传统知识。 (例如:root = tk.Tk() 等)。这将使您的代码更容易 以多一点打字为代价来理解。鉴于两者 tkinter 和 ttk 经常一起使用,并使用 同名,这是一件好事。正如蟒之禅所说: “显式优于隐式”。

注意:as tk 部分是可选的,但可以让你做的少一点 打字:tk.Button(...) vs tkinter.Button(...)

完整答案:https://stackoverflow.com/a/11621141/4396006

为什么你的解释器不导入 Tk

我不确定您的解释器为什么不为此用途导入 Tk。您必须提供更多详细信息才能解决这部分问题。

编辑:from tkinter import * 行将tkinter 模块文件夹中的__init__.py 文件的命名空间包含到您的文件中。因此,您应该检查:

  1. PyCharm 从哪里导入 tkinter 模块。您可以转到导入中的tkinter 词,右键单击获取上下文菜单,然后转到:Go to --> Declaration(或直接点击Ctrl+B)。它应该带您到 __init__.py 文件,其中 Tk 应该是其中定义的类。

  2. 您在运行文件时的 Python 路径是否正在获取您在其中找到 Tk 模块的文件夹。

如果其中任何一个不正常,则可能是因为您的安装已损坏。如果您告诉我们如果只有 from tkinter import * 不起作用或者 import tkinter; tkinter.Tk 也没有定义,我会很有帮助。您应该进行全新安装。

为了帮助我们了解问题的根源,请尝试从终端或 Python 控制台运行相同的代码,看看会发生什么。

【讨论】:

  • 为什么?他已经有from tkinter import *。为什么Tk() 不按原样工作?
  • @blue_note 解释已添加。
  • 嗯,import * 在 3.6.4 中对我来说很好用。甚至tkinter 文档也使用它。
  • 是的。我从他的问题中假设了部分答案。当时没有 Python 控制台可以尝试。纠正它。不过确实是这样推荐的
  • 好吧,如果第一行都不起作用,tkinter.Tk() 不起作用,那么很可能是 OP 没有安装 tkinter,或者由于某种原因它被损坏或删除。全新安装的 python 应该可以修复它。
【解决方案2】:

让我们理清一些基础知识,因为您似乎认为有几件事应该有效,但永远不会。

无论您如何导入,Tk() 都需要单独使用大写 T 或使用适当的前缀。

你尝试过的东西永远不会奏效。

root = tk(), Tk.tk(), root = TK.TK()

全部小写 tk() 或全部大写 TK() 在 tkinter 中永远无法工作。

如果from tkinter import * 不起作用并且top = tkinter.Tk() 不起作用,则很可能您没有安装 tkinter。或者至少由于某种原因它已被删除。

Windows 发行版应该已经带有 tkinter。我会尝试进行全新安装,看看会发生什么。无论如何,您应该更新到 3.6,因为 3.5 有一些需要修复的错误。

至于您的导入问题。

from tkinter import * 这一行应该可以与top = Tk() 一起正常工作。所以这告诉我 tkinter 没有安装。

import tkinter 这个多余的行应该作为top = tkinter.Tk() 工作,但如果前一个行不工作,那么这可能也不会。

在对 PyCharm 进行一些测试之后,我可以说,如果 PyCharm 无法加载 tkinter,那么它首先会在导入时出错,而不是 Tk() 部分。

Traceback (most recent call last):
  File "C:/Users/mcdomi3/PycharmProjects/MintyFlakes/test.py", line 1, in <module>
    from Tkinter import *
ModuleNotFoundError: No module named 'tkinter'

Process finished with exit code 1

我认为您的安装已损坏。

结论。

您需要重新安装 python 或尝试pip install tkinter,因为它在您的库中丢失或以某种方式损坏。

【讨论】:

  • 奇怪的是,如果第一个不起作用但后者会起作用。 Tk 是__init__.py 文件中的一个类;要么文件被修改,要么如果导入成功,那么 Tk 应该在命名空间中。
  • 如果tkinter.Tk() 工作会很有趣。无论如何,如果第一个不起作用,则后者不应该起作用。我认为对 3.6 的简单更新将解决操作思想的问题。
  • @J.C.Rocamonde 哼。我在 PyCharm 中测试了一些东西,但之前从未使用过它。如果库不可导入,则错误应该是ModuleNotFoundError: No module named 'tkinter'。这太有趣了。这告诉我 pycharm 确实导入了 tkinter,然后无法加载 Tk()...
  • 哈哈,这就是我想告诉你的。这个错误确实很有趣。如果他提供更多信息,我们可能会更好地帮助他。但是错误回溯和上下文非常减少。
  • @J.C.Rocamonde 我刚刚注意到 OP 正在使用 Anaconda。这很可能是罪魁祸首。 Anaconda 包含数百个库,其中一些无法运行或无法完全运行,因为每个库都是为 Anaconda 自定义设置的。我看过很多关于 Anaconda 问题的 Q/A 帖子。
【解决方案3】:

删除前 3 行。您已经尝试了所有可能的名称。他们中的大多数都不工作。 Tkinter 或 tkinter 存在,tk() 不存在。

【讨论】:

  • 谢谢亲爱的它在重新安装 Tk 模块和 Python 后工作正常
猜你喜欢
  • 2015-08-13
  • 2016-12-29
  • 2017-07-15
  • 1970-01-01
  • 2013-05-30
  • 2016-07-20
  • 2018-02-04
相关资源
最近更新 更多