为何.get()无法读取Entry输入字符串?NameError问题求助
问题解决:NameError: name 'researcher' is not defined
问题根源
- 变量作用域限制:
researcher是intro()函数内的局部变量,header()函数无法跨作用域访问该变量。 - 输入获取时机错误:在Entry组件刚创建时就调用
r_var.get(),此时用户还未输入内容,且后续输入的内容也无法同步到researcher变量中。
修复后的完整代码
# Intro Entry Test import tkinter as tk from tkinter import * from tkinter import ttk ##### Master Window master = tk.Tk() master.configure(background='lightgreen') ## Background color master.geometry('1500x900') master.title(' Kansas Species Key 31xz ') ## Master Title master.grid() ### Create the Master Canvas ##### w = Canvas(master, width=1500, height=900) w.grid() # 将绑定Entry的StringVar定义为全局变量,实现跨函数访问 r_var = tk.StringVar() ### Print Header to screen def header(): # 点击提交按钮时才获取输入框的最新内容 researcher = r_var.get() Label(master, text=researcher, font=("arial bold", 12)).place(x=125, y=4) ### Introduction Screen def intro(): # Frame for Box content = ttk.Frame(master, relief="raised", borderwidth=6, padding=(3,3,12,12)) content.grid(column=0, row=0) # Frame for Introduction Box Content frame1 = ttk.Frame(content, borderwidth=10, relief="raised", width=500, height=450) frame1.grid(column=0, row=0, columnspan=2, rowspan=1, sticky=(N, S, E, W)) researcherlbl = ttk.Label(frame1, text="Researcher", justify=RIGHT, relief="raised", font="Times 14 bold") researcherlbl.grid(column=0, row=10, padx=5, pady=5, sticky=E) r_name = ttk.Entry(frame1, justify="left", textvariable=r_var) r_name.grid(column=1,row=10, sticky=W) # Submit Button submit = ttk.Button(frame1, text="Submit", command=header) submit.grid(column=1, row=16) ##### Introduction intro() ##### MAIN LOOP ########### mainloop()
核心修复说明
- 把
r_var设为全局变量,让intro()和header()两个函数都能访问到这个绑定了输入框的变量。 - 将
r_var.get()的调用移到header()函数内,确保只有用户点击提交按钮时才读取输入框的最新内容。 - 修正了原代码中
esearcherlbl的笔误,改为researcherlbl,避免额外的未定义错误。
内容的提问来源于stack exchange,提问作者Miller
相关产品推荐
相关产品推荐

