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

Tkinter Entry执行delete操作后保留已输入姓名字符串的解决方法

问题原因

你的Entry组件和name这个StringVar做了双向绑定,调用getname.delete(0,'end')清空输入框内容时,绑定的name变量也会同步被清空,后续调用name.get()拿到的就是空字符串,所以Q1_1里的姓名会缺失。

修复方案

新增一个全局变量专门存储已经提交的姓名,不要直接依赖和输入框绑定的StringVar取值,修改后代码如下:

# 原有代码无需修改的部分保持不变
#NameInfo
NameInfo = ttk.Label(root, font=("Calibri", 14), text="Bitte geben Sie zuerst Ihren (eigenen) Namen ein:")
NameInfo.grid(column=0, row=3, sticky=tk.NW, padx=0, pady=0)
#Name
name = tk.StringVar()
getname = ttk.Entry(root, textvariable=name)
getname.grid(column=0, row=4, sticky=tk.NW, padx=0, pady=0)
#SaveName
SaveName = ttk.Button(root, text="Speichern", command=lambda: DisplayWelcome())
SaveName.grid(column=1, row=4, sticky=tk.NW, padx=0, pady=0)

#DisplayWelcome
def DisplayWelcome():
    # 新增全局变量存储提交的姓名
    global saved_name
    saved_name = name.get().strip()
    global DisplayWelcome1
    # 这里也可以直接用saved_name替代name.get(),效果一致
    DisplayWelcome1 = ttk.Label(root, font=("Calibri", 14), text=(str('Hallo, ' + saved_name + ' :)')))
    DisplayWelcome1.grid(column=0, row=5, sticky=tk.NW, padx=0, pady=0)
    global DisplayWelcome2
    DisplayWelcome2 = ttk.Label(root, font=("Calibri", 14), text="xxx")
    DisplayWelcome2.grid(column=0, row=6, sticky=tk.NW, padx=0, pady=0)
    global DisplayWelcome3
    DisplayWelcome3 = ttk.Label(root, font=("Calibri", 14), text="xxx")
    DisplayWelcome3.grid(column=0, row=7, sticky=tk.NW, padx=0, pady=0)
    global ForwardButton
    ForwardButton = ttk.Button(root, text="Weiter", command=lambda: ForwardButtonClicked())
    ForwardButton.grid(column=0, row=8, sticky=tk.NW, padx=0, pady=0)
    getname.delete(0,'end')

#ForwardButtonClicked
def ForwardButtonClicked():
    HelloInfo1.grid_remove()
    HelloInfo2.grid_remove()
    img_label.grid_remove()
    NameInfo.grid_remove()
    getname.grid_remove()
    SaveName.grid_remove()
    DisplayWelcome1.grid_remove()
    DisplayWelcome2.grid_remove()
    DisplayWelcome3.grid_remove()
    ForwardButton.grid_remove()
    global Q1_1
    # 这里用存储好的saved_name替代name.get()
    Q1_1 = ttk.Label(root, font=("Calibri", 14), text=(str('Ok, ' + saved_name + ' xxx')))
    Q1_1.grid(column=0, row=0, sticky=tk.NW, padx=0, pady=0)

其他优化建议

如果不想用全局变量,也可以把业务逻辑封装成类,用类属性存储用户输入的姓名,可维护性更好。

内容的提问来源于stack exchange,提问作者ne0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:00