首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Tkinter导入* ImportError:没有名为“Tkinter”的模块

从Tkinter导入* ImportError:没有名为“Tkinter”的模块
EN

Stack Overflow用户
提问于 2018-08-31 11:13:11
回答 3查看 23.5K关注 0票数 0

我在Windows中使用PyCharm,并通过Anaconda和tkinter模块下载了Python3.5.5和所有其他库。在此之前,我用它来解决任何问题。上一次我安装了LiveStreamer库。我觉得这会引起问题。尝试过资本和小规模:

代码语言:javascript
复制
from Tkinter import * , from tkinter import * , 
root = tk(), root = Tk(), root = tk.Tk(), root = tk.Tk(), root = Tk.tk()
root = TK.TK()

下面是我在PyCharm中运行的代码:

代码语言:javascript
复制
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()

这些在这里都没有用

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-31 11:58:37

让我们澄清一些基本的事情,因为它似乎你认为有几件事应该工作,永远不会。

不管您是如何导入的,您总是需要使用大写T本身或适当的前缀来执行Tk()

你尝试过的东西永远不会成功。

代码语言:javascript
复制
root = tk(), Tk.tk(), root = TK.TK()

所有小写tk()或所有大写TK()都不会在tkinter中工作。

如果from tkinter import *不工作,而执行top = tkinter.Tk()不工作,则很可能没有安装tkinter。或者至少因为某种原因它已经被移除了。

Windows发行版应该已经有tkinter了。我会尝试做一个干净的安装,看看会发生什么。无论如何,您应该更新到3.6,因为3.5有一些需要修复的bug。

至于你们的进口问题。

from tkinter import * --这一行在top = Tk()中应该可以很好地工作。所以这告诉我,tkinter没有安装。

import tkinter这个冗余行应该以top = tkinter.Tk()的形式工作,但是如果前面的代码不能工作,那么这可能也不会。

在PyCharm上做了一些测试之后,我可以说,如果PyCharm未能加载tkinter,那么它将首先在导入上出错,而不是Tk()部分。

代码语言:javascript
复制
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,因为它从库中丢失或以某种方式损坏。

票数 1
EN

Stack Overflow用户

发布于 2018-08-31 11:18:09

好的。首先:

你不该做的事:

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

代码语言:javascript
复制
try:
    import Tkinter

except ImportError:  # Python 3.x present
    import tkinter

但是,在您的例子中,您已经知道您有Python 3,所以这不是一个问题。只需使用正确的(继续读到下一节)。

你应该做的是:

如果您使用的是Python2.x:

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

如果您使用的是Python3.x:

模块名为tkinter。注意小写。您必须做import tkinter,并使用tkinter.Tk

基本原理

您可能想从这个已经张贴在下面的答案中读到这个片段:

然而,对于通配符导入,PEP8有这样的看法: 应避免通配符导入(从import *) 尽管不计其数的教程忽略了PEP8,但PEP8 8兼容的导入方式如下所示: 进口tkinter作为tk 在以这种方式导入时,您需要在所有tkinter命令前面加上tk。(例如: root = tk.Tk()等)。这将使您的代码更容易理解,而不需要更多的输入。考虑到tkinter和ttk经常一起使用并以相同的名称导入类,这是一件好事。正如python的禅宗所说:“显式比隐式好”。 注意: as tk部分是可选的,但允许您少输入一些:tk.Button(.)vs tkinter.Button(.)

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

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

我不确定为什么您的解释器不为该用途导入Tk。你必须提供更多的细节,才能解决问题的那一部分。

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

  1. PyCharm从哪里导入tkinter模块。您可以转到导入中的tkinter单词,右键单击获得上下文菜单,然后转到:Go to --> Declaration (或只点击Ctrl+B)。它应该带您到那个__init__.py文件,其中Tk应该是在其中定义的一个类。
  2. 运行该文件时,您的Python路径是否正在获取您在其中找到的Tk模块所在的文件夹。

如果这其中的任何一个是不好的,那可能是因为你的安装是坏的。如果您告诉我们,如果只有from tkinter import *不工作,或者import tkinter; tkinter.Tk也没有定义,我会很有帮助的。你应该去一个干净的安装。

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

票数 4
EN

Stack Overflow用户

发布于 2018-08-31 11:27:19

移除前3行。你试过了所有可能的名字。大多数都不起作用。Tkintertkinter都存在,而tk()不存在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52114259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档