尝试使用Tkinter,只想添加一个简单的Text
字段。我已经能够添加Entry
,Button
和Label
,但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 *
这将强制它,但我很好奇为什么它没有这种改变就无法工作。
答案 0 :(得分:6)
INSERT
是Tkinter
中定义的常量,因此您还需要在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.INSERT
和tk.Button
等等。
as tk
形式的另一个好处是,它可以更容易地将代码迁移到Python 3,或编写在2和3上运行的代码; Python 3中的模块名称全部为小写:tkinter
。