python - 从 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()
这些都不在这里工作
解决方案
行。首先:
你不应该做的事情:
在生产环境中,如果你不确定一个模块是用一种方式调用还是另一种调用方式(这可能取决于安装的 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__.py
tkinter
PyCharm 从哪里导入 tkinter 模块。您可以转到
tkinter
导入中的单词,右键单击获取上下文菜单,然后转到:(Go to --> Declaration
或直接点击Ctrl+B
)。它应该带你到那个应该是在那里定义的类的__init__.py
文件。Tk
运行文件时的 Python 路径是否正在获取您在其中找到 Tk 模块的文件夹。
如果其中任何一个不正常,则可能是因为您的安装已损坏。from tkinter import *
如果您告诉我们 if only不起作用或 ifimport tkinter; tkinter.Tk
也没有定义,我会很有帮助。您应该进行全新安装。
为了帮助我们了解问题的根源,请尝试从终端或 Python 的控制台运行相同的代码,看看会发生什么。
推荐阅读
- ejabberd - 无法从非本地 ip 在 ejabberd 中注册
- java - SpringBootApplication在子包下找不到bean
- angular - 通过 Angular Renderer2 编辑画布不起作用
- android - 如何取消收集协程StateFlow?
- sql-server - SQL Server 通过分组数据使用多列排序顺序
- python - 为什么幻影js浏览器打不开?
- javascript - 收到新的 Google 表单提交后,如何忽略向具有价值的行发送电子邮件?
- python-3.x - 无法按指标过滤(comparisonValue 未在 400 值中重新识别
- javascript - 从 json 文件导入时,如何使我的 i18n-js 文本正确呈现?
- spring-boot - 即使在将成功的身份验证添加到 SecurityContextHolder 后也会出现 401 错误