【问题标题】:Python Tkinter - global name Tk() is not definedPython Tkinter - 未定义全局名称 Tk()
【发布时间】:2018-11-22 17:07:37
【问题描述】:

我一直在关注 Python 中 tkinter 接口的教程,它使用以下代码为程序声明一个根小部件,然后该小部件具有子小部件:

root = Tk() 

我在尝试解释这段代码时遇到以下错误:

Global name Tk() is not defined 

我很确定这是因为自教程以来 tkinter 发生了变化;我找不到任何其他不使用类似 sn-ps 代码的教程,因此它们也不起作用。

我的问题在上下文中很简单,但是搜索,我找不到答案; 我怎样才能绕过这个:tkinter 的语法发生了什么变化以及声明根小部件的新方法是什么?另外,如果有人知道 tkinter 来警告我将子小部件添加到根目录的方式是否也发生了变化,那就太好了。

感谢您的所有回复〜迈克尔

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您可能忘记了顶部的from Tkinter import *

    【讨论】:

    • 我见过的大多数教程都告诉您使用(或假设您将使用)这一行。如果您刚刚使用import Tkinter,则必须改用root=Tkinter.Tk()
    • @chepner,我也希望这样。但显然他正在阅读的教程有所不同。
    • 这是一个不好的习惯。我推荐import Tkinter as tk,然后使用tk.Tk()等。import *从来都不是一个好主意。
    【解决方案2】:

    另外,还有

    import Tkinter
    

    import Tkinter as tk
    

    编辑:通常,您想使用成语from <library> import <module>,因此对于您的具体示例,from Tkinter import Tk 可以工作。

    它只允许你在代码中输入tk.Button,而不是Tkinter.Button。如果您使用的是 Python 3.x,则该库是小写的。

    import tkinter
    

    对于一般的导入问题,我看到Importing Python Modules 链接在 SO 上被大量引用。

    【讨论】:

      【解决方案3】:

      您似乎已将文件命名为 tkinter.py。您不能使用要导入的模块命名文件。 Python 将尝试从您现有的文件而不是 tkinter 模块导入。会有模块名collison。尝试重命名您的文件名。

      【讨论】:

        【解决方案4】:
        from Tkinter import *
        root = Tk()
        

        【讨论】:

        • 请不要鼓励用户from X import *!!1
        • 为什么不呢,@Kay?我问,作为一个 Python n00b。
        • 我猜这与不良做法有关,如果您“从 X 导入 *”它会从该模块导入所有内容,如果您对同一脚本中的多个模块执行此操作,则可能冲突
        猜你喜欢
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 2017-02-03
        • 2013-08-23
        • 2013-11-12
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多