You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:30:59