我一直在学习 tkinterTkinter 中的消息小部件在 Python 课程和教程。
当我使用网站上显示的选项添加锚选项时,我不断收到错误。我被告知NE
不存在,但NE
在上面的链接中作为锚选项给出:
NameError: name 'NE' is not defined
这是我的代码。
import tkinter
root = tkinter.Tk()
message = ("Whatever you do will be insignificant,"
"but it is very important that you do it.n"
"(Mahatma Gandhi)")
msg = tkinter.Message(root,text = message, anchor = NE, aspect = 1000,
foreground='red', background='yellow',
highlightcolor='green', highlightthickness=0,
borderwidth=500)
#msg.config(bg='lightgreen', font=('times', 24, 'italic'))
msg.pack()
tkinter.mainloop()
编辑:我也尝试在单引号中输入'NE'
,但没有用。
这些值是字符串文字"n"、"ne"、"e"、"se"、"s"、"sw"、"w"、"nw"或"center"。案例很重要。它们代表指南针的方向(北、南、东和西)
在您的情况下,您使用的是包含这些值的 tkinter 常量。由于导入 tkinter 的方式,必须在这些常量前面加上模块名称。例如,tkinter.NE
.
我个人认为使用设置为"n"或"ne"的常量N
或NE
很奇怪。常量除了在这种情况下有时引起混淆之外没有任何目的。
以下是规范文档:
指定小部件中的信息(例如文本或位图)在小部件中的显示方式。必须是值 n、ne、e、se、s、sw、w、nw 或 center 之一。例如,nw 表示显示信息,使其左上角位于小部件的左上角。
我认为您需要使用模块名称对其进行限定。
msg = tkinter.Message(root,text = message, anchor = tkinter.NE, ...
您也可以使用字符串文字,但我不确定这是记录的行为。
msg = tkinter.Message(root,text = message, anchor = "ne", ...
如果其他人在使用锚选项时遇到问题,请尝试将其放入包函数中:
msg.pack(anchor = 'w')
而不是在消息或配置中,奇怪的是这对我不起作用:
msg.Message(anchor = 'w', ...)
msg.config(anchor = 'w', ...)
只是澄清如果对问题中网站链接上的示例代码进行更改,代码为什么有效。
在阅读了 Kevin 和 Bryan Oakley 的回答后,我意识到网站之所以有 NE 与 tkinter.NE 并且它有效,如果你在示例代码中添加锚选项,是他们导入 tkinter 模块的方式。
from Tkinter import * #Python 2
from tkinter import * #Python 3
我一周前才知道这一点,Mark Roddy 在这里的回应("导入模块"或"从模块导入")不鼓励使用 import *
,因为很难判断代码来自哪个模块。这就是我的困惑。