【问题标题】:Visual Studio - NameError: name 'Tk' is not definedVisual Studio - NameError:名称“Tk”未定义
【发布时间】:2015-08-08 15:17:52
【问题描述】:

我正在尝试使用 Visual Studio 社区 2015 中的 python Tkinter 模块显示一个简单的窗口。每当我尝试时,我都会收到一条错误消息 代码如下:

  from tkinter import *

  root = Tk()
  theLabel = Labe1(root, text="This is too easy")
  theLabel1.pack()
  root.mainloop()

这是错误信息:

NameError: name 'Tk' is not defined

我该如何解决这个问题?

【问题讨论】:

  • 如果出现问题,您没有收到来自from tkinter import * 的错误,这很奇怪。尝试使用import tkinter 运行文件,然后使用print(sorted(dir(tkinter))) 并验证Tk 是打印出来的列表项之一。
  • 使用Labe1 而不是Label 也会遇到问题,同样因为没有任何名称为theLabel1。
  • 您是否将文件命名为“tkinter.py”?
  • Byran Oakley:我确实将我的文件命名为 tkinter.py

标签: python visual-studio python-3.x tkinter


【解决方案1】:

如果你的 pythonpath 中有其他名为“tkinter”的模块,你会得到这个结果。例如,如果您将程序命名为“tkinter.py”,或者如果您的路径中有一个名为“tkinter.py”的文件。

解决方法是简单地重命名您的文件。当您执行“import tkinter”时,它会导入您的文件而不是 tkinter 模块。

检查实际导入的内容的一种简单方法是执行以下操作:

import tkinter
print("the imported file is", tkinter.__file__)

【讨论】:

  • @nathansiafa:重命名你的文件。
【解决方案2】:

查看我的其他一些代码,我注意到一个与您尝试做的事情相同的代码。我修改了你的代码以匹配我发现的内容,并且我能够让它工作。

import tkinter as tk
from tkinter import *

root = tk.Tk()
Label(root, text="This is too easy").grid(row=0,column=0)
mainloop()

我已经开始使用 grid 而不是 pack,因为它可以更好地控制项目的位置。 我注意到有时我会遇到同样的错误。导入 tkinter 本身是我发现绕过它的唯一方法。

【讨论】:

  • 您的回答根本没有解决 OP 的问题。
  • 谢谢。我正在查看三个代码窗口并抓住了错误的一个。
  • 当我尝试你的方法时,我得到了这个错误:'module' object has no attribute 'Tk'
  • 我同意@Bryan Oakley。如果您收到模块错误,那么它一定没有导入正确的 tkinter 模块。因为我一直用这个方法。对于不同的小部件,它使调用 tkinter 模块变得更加简单。
猜你喜欢
  • 2014-09-15
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2013-11-04
  • 2018-01-24
  • 1970-01-01
  • 2021-04-15
相关资源
最近更新 更多