Tkinter使用side=TOP、fill=X报错NameError的技术求助
解决Tkinter中
NameError: name 'TOP' is not defined的问题 这个报错的原因很典型:你采用了import tkinter as tk的导入方式,Tkinter里的布局常量(比如TOP、X这些)都是tk模块的成员,直接写TOPPython会找不到这个名称,必须加上模块前缀tk.才行。
你想要两个Label在Frame里上下排列的需求,其实默认的pack()行为就是side=TOP,不过如果你想明确指定参数,只需要把代码里的TOP和X改成tk.TOP和tk.X就可以解决报错了。
修正后的完整代码如下:
import tkinter as tk MAINFONT = "Marcellus SC" SUBFONT = "Oswald" TEXT_SIZE = 12 SPACER = 37 #this is the padding beween cells scale_factor_x = 1 # 补充你代码里缺失的scale_factor_x定义,否则会触发新报错 question_1 = "示例问题文本" # 补充缺失的question_1变量定义 root = tk.Tk() #Other rows have been established question_1_frm = tk.Frame(border = 1) question_1_frm.grid(row = 3, column = 2, sticky = "NW") first_question_lbl = tk.Label(question_1_frm, text = question_1, font = (MAINFONT, TEXT_SIZE), bg = "white", wraplength = 403*scale_factor_x, justify="left") first_question_lbl.pack() first_answer_lbl = tk.Label(question_1_frm, font =(MAINFONT,TEXT_SIZE), text="示例答案文本") first_answer_lbl.pack(side = tk.TOP, fill=tk.X) root.mainloop()
另外补充个小技巧:如果觉得每次写tk.太繁琐,你也可以单独导入这些常量,比如:
from tkinter import TOP, X
这样就可以直接用TOP和X了,但这种方式要注意避免和自己定义的变量名冲突,相对来说还是保留tk.前缀的方式更清晰,也更不容易出问题。
内容的提问来源于stack exchange,提问作者James Novis
相关产品推荐
相关产品推荐

