首页 > 解决方案 > 从 Tkinter 导入 * ImportError:没有名为“Tkinter”的模块

问题描述

我在 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()

这些都不在这里工作

截屏

标签: pythontkinter

解决方案


行。首先:

你不应该做的事情:

在生产环境中,如果你不确定一个模块是用一种方式调用还是另一种调用方式(这可能取决于安装的 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 命令前加上 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__.pytkinter

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

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

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

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


推荐阅读