NameError:全局名称' INSERT'没有定义

时间:2017-03-06 15:30:05

标签: python python-2.7 tkinter

尝试使用Tkinter,只想添加一个简单的Text字段。我已经能够添加EntryButtonLabel,但Text会导致问题。以下是Text的内容:

import Tkinter

class myapp_tk(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.grid()

        self.about = Tkinter.Text(self)
        self.about.insert(INSERT, "Hello World!")

        self.about.grid(row=0, column=0)

if __name__ == '__main__':
    myapp = myapp_tk(None)
    myapp.title("My First App!")
    myapp.mainloop()

收到错误:

NameError: global name 'INSERT' is not defined

我已经改变了脚本标题以包含from Tkinter import *这将强制它,但我很好奇为什么它没有这种改变就无法工作。

2 个答案:

答案 0 :(得分:6)

INSERTTkinter中定义的常量,因此您还需要在Tkinter.之前(给定您的代码),您需要这样做:

self.about.insert(Tkinter.INSERT, "Hello World!")

通常,如果您将模块A导入为import A,那么要从x调用函数或变量A,您始终需要A.x }。

答案 1 :(得分:1)

INSERT是Tkinter名称,因此您需要Tkinter.INSERT

避免“星级”导入是一种很好的做法 - 使用Tkinter进行星型导入会将超过一百个名称加载到全局namspace中,这是一个混乱的名称冲突配方。

你可以通过这样的导入来减少冗长:

import Tkinter as tk

然后你就可以做tk.INSERTtk.Button等等。

as tk形式的另一个好处是,它可以更容易地将代码迁移到Python 3,或编写在2和3上运行的代码; Python 3中的模块名称全部为小写:tkinter