为了简单起见,我的“表格”看起来像这样:
import tkinter as tk
ventana = tk.Tk()
mensaje = tk.Text(ventana, background="white", width=165, height=25)
mensaje.config(state="disable")
mensaje.pack(padx=0, pady=125)
mensaje.insert(INSERT, "Hola Mundo")
ventana.mainloop()
我知道我mensaje.insert(INSERT, "Hola Mundo")
应该将所需的文本添加到我的小部件中,但我收到此错误:
文件“search.py”,第 5 行,在 message.insert(INSERT, “Hello World”) NameError: name 'INSERT' is not defined
我究竟做错了什么?
INSERT
是在模块内部定义的变量tkinter
,其值为 string'insert'
。实际上,根据 Python 约定,它是一个常量(大写字母的标识符应该被视为常量,请记住,常量的概念在 Python 中并不存在。)当属于模块
tkinter
并执行表单的导入时,import tkinter as tk
必须指明它所属的命名空间:混乱的出现是因为许多 tkinter 文档忽略了 PEP 和 Python 自己的 zen 对导入的看法。在表单中导入是很常见的
from tkinter import *
,这通常是一种不好的做法,唯一可能的理由是你想用 ttk 覆盖 tkinter 小部件,我仍然不喜欢它:)。from tkinter import *
将所有全局变量导入当前命名空间,因此它mensaje.insert(INSERT, "Hola Mundo")
是有效的。问题是这可能会导致与其他导入或我们自己的变量发生冲突,它不必要地填充当前命名空间,我们最终不清楚所有内容的来源。Python之禅 说:
tk.
为了拯救我们(或std::
在 C++ 及其using namespace std
...中)而将其全部扔掉是没有意义的。我们知道该tk.INSERT
变量属于谁,并且它永远不会与INSERT
我们自己的模块或其他导入中调用的其他变量发生冲突。像, ,等其他常量一样,它们可以在使用它们的方法中替换,用它们的值替换它们
N
NW
CENTER
该方法
tkinter.Text.insert
的第一个参数是要插入文本的索引,第二个是文本本身,第三个是一个元组,其中包含与该文本关联的标签,这是可选的。可以通过多种方式指定索引(请参阅文档)。tk.INSERT
我们指出应该插入的索引是光标在小部件中的当前位置Text
。Text
最后,如果文本的状态为,则表明不能通过代码或标准输入插入文本"disabled"
。