2017-03-06 232 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

相關問題