2017-03-06 236 views
0

试着在Tkinter的手中,只想添加一个简单的Text字段。我已经能够添加Entry,ButtonLabel,但Text会导致问题。以下是我对Text:收到NameError:全局名称'INSERT'未定义

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

很像'Tkinter.Tk'和'Tkinter.Text',你需要'Tkinter.INSERT'。如果你不使用'from ... *'import – turbulencetoo

回答

3

INSERTTkinter定义的常量,所以你也需要Tkinter.(给你的代码)先于它,那就是你需要做的:

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

在一般情况下,如果导入模块A作为import A,然后从A调用函数或变量x,则始终需要执行A.x

1

INSERT是Tkinter的名字,所以你需要Tkinter.INSERT

避免“明星”进口是一个很好的做法 - 用Tkinter进行明星导入,将超过一百个名字加载到全局namspace中,这是凌乱和名称冲突的秘诀。

可以让事情更简洁一些做这样导入:

import Tkinter as tk 

然后,你可以做这样的事情tk.INSERTtk.Button

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

相关问题