【问题标题】:Python Tkinter Tk is not definedPython Tkinter Tk 未定义
【发布时间】:2017-07-25 18:49:23
【问题描述】:

我需要帮助才能使这个简单的 Tkinter 程序在带有 Python 3.5.2 的 Ubuntu 16.04.1 上运行。

代码如下:

from tkinter import *

root = Tk()
mylabel = Label(root, text="Test")
mylabel.pack()

root.mainloop()

代码原样给我这个错误:

Traceback (most recent call last):
  File "tkinter.py", line 8, in <module>
    from tkinter import *
  File "/home/dylan/Documents/proj/python/tkinter.py", line 10, in <module>
    root = Tk()
NameError: name 'Tk' is not defined

我注意到浏览其他问题有一些流行的东西 制作 Tkinter 程序时可能会出错。

  1. Tkinter 没有安装。 在更新我的包、保存我的文件并使用python3 tkinter.py 运行我的程序之前,我安装了python-tkpython3-tk 包。

注意:将我的文件重命名为 tkinter.py 以外的名称会导致奇怪的错误:

Traceback (most recent call last):
  File "mytkinter.py", line 8, in <module>
    from tkinter import *
ImportError: bad magic number in 'tkinter': b'\x03\xf3\r\n'
  1. 导入名称错误。tkinter 与小写一起使用会给我Tk() not defined 错误,表明导入名称正确,但名称Tk 不正确。 将它与大写 T 一起使用会给我一个 no module named Tkinter 错误。 使用tkinter.Tk() 会导致tkinter is not defined 错误。 Installing tkinter on ubuntu 14.04

  2. 代码中的大小写,或者Tk()的实例化,或者类似的名字,是错误的。 打字

    • root = tk()
    • root = Tk()
    • root = tkinter()
    • root = Tkinter()
    • root = tkinter.tk()
    • root = tkinter.Tk()
    • root = Tkinter.tk()
    • root = Tkinter.Tk()
    • root = tk.Tk()
    • root = Tk.Tk()

都会导致 NameErrors。 Programming in Python: Getting "name 'Tk' is not defined" only at Command Prompt, works in IDLE

另外需要注意的是:命令python3 -m idlelib.idle(如下面的问题所示)也会导致Tk not defined 错误。 'Tk' is not defined

这可能是什么问题?

【问题讨论】:

    标签: python-3.x user-interface tkinter


    【解决方案1】:

    您似乎已将文件命名为 tkinter.py。您不能使用要导入的模块命名文件。 Python 将尝试从您现有的文件而不是 tkinter 模块导入。会有模块名collison。您的文件中没有定义这样的Tk(),它会生成NameError

    但是,当您重命名文件时,“错误的幻数”可能是由于 .pyc 文件(从 .py 文件编译而来)可能导致此类错误。 搜索并删除这些文件并重新运行。它应该可以解决问题。

    【讨论】:

    • 我将文件重命名为 mytkinter.py,并删除了 .pyc 文件,终于成功了!非常感谢,尽管这本来可以少得多的痛苦。
    • 我的文件名是 gui.py,我仍然有 @Dylan 的确切问题
    【解决方案2】:

    不要使用模块名称命名任何脚本,即使是部分名称。你的线索在这里:

    File "mytkinter.py"
    

    【讨论】:

    • 这在我接受的答案中已经提到:“你不能用你正在导入的模块命名文件。”你能解释为什么部分名称不起作用吗?似乎在文件名中搜索字符串比在文件名中搜索更多的工作。
    【解决方案3】:

    如果您在 IDLE 中使用 root = Tk(),那么它将运行,但是,如果您想在另一个 IDE 中使用此代码,您必须使用 root = tkinter.Tk() 可能会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2015-01-21
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多