Tkinter中Entry组件调用get()触发AttributeError报错问题
问题根因
这个报错是Tkinter开发的典型新手坑:
- Tkinter组件的
pack()、place()、grid()三个布局方法,返回值全都是None,不会返回组件对象 - 你写的
qentry = Entry(question,).place(...)是链式写法,最终qentry接到的是place()返回的None,根本不是输入框实例,后面调用qentry.get()当然会报找不到get属性的错 - 你代码里其他Label、Button的赋值也犯了一样的错,只是你暂时没操作这些变量,所以没触发报错。另外你代码最后调用写的是
question(),但你定义的函数名是questionw,这处笔误也会导致代码跑不起来。
修复方法
把组件创建和布局调用拆成两行:先实例化组件赋值给变量,再单独对变量调用布局方法就行。
修正后的可运行代码:
from tkinter import * players = [] def questionw(): def addplayer(): player = qentry.get().strip() if player: # 避免添加空名字 players.append(player) # 添加完更新按钮上的人数计数,清空输入框 qadd.config(text=f"Add ({len(players)})") qentry.delete(0, END) question = Tk() question.geometry("200x150") # 先创建组件,再做布局 qentry = Entry(question) qentry.place(y=60, x=3, width=195, height=20) qlabel = Label(question, text="What is the name\nof the player?", justify=CENTER, font=("Amasis MT Pro",12)) qlabel.pack() qdone = Button(question, text="Done") qdone.place(y=90, x=10, width=80) qadd = Button(question, text=f"Add ({len(players)})", command=addplayer) qadd.place(y=90, x=100, width=80) qcancel = Button(question, text="Cancel") qcancel.place(y=120, x=55, width=80) question.mainloop() # 原代码这里函数名写错了,修正为questionw questionw()
额外优化点:加了空字符串判断,避免用户没输内容就点Add把空值存进玩家列表;添加玩家后自动清空输入框、同步更新Add按钮上的人数计数,交互更顺畅。
内容的提问来源于stack exchange,提问作者Beronicous
相关产品推荐
相关产品推荐

