tkinter Entry组件get()取值仅一个可打印另一个为空的问题排查
问题原因分析
核心问题是what_is_answer_entry_get的赋值时机错误:
- 你在Entry组件初始化完成后立刻调用
what_is_answer_entry.get()赋值给全局变量,此时用户还没有输入任何内容,所以变量内存储的是空字符串 get()方法是瞬时取值,只会返回调用那一刻输入框内的内容,不会自动同步后续用户输入的内容,所以即便之后用户输入了内容,全局变量里存储的还是最初的空值- 另一个变量
ask_an_entry_get能正常输出,是因为它的赋值时机在用户输入完成后、打印操作执行前,所以能取到最新的输入内容
解决方案
方案1(推荐):实时取值,不提前缓存结果
不要把输入框内容提前存到全局变量,需要用到的时候直接调用Entry组件的get()方法即可,修改函数代码如下:
def answer_quizmaker_score(): # 直接调用Entry组件的get方法,实时获取当前输入内容 print(ask_an_entry.get()) print(what_is_answer_entry.get())
方案2:更新全局变量的赋值时机
如果必须使用全局变量存储输入值,需要把赋值逻辑放到用户输入完成后、打印操作执行前,比如绑定输入框的键盘事件,每次用户输入就更新全局变量:
# 绑定输入事件,每次按键松开时更新全局变量 def update_entry_var(event): global what_is_answer_entry_get what_is_answer_entry_get = what_is_answer_entry.get() what_is_answer_entry.bind("<KeyRelease>", update_entry_var)
也可以在触发answer_quizmaker_score的按钮点击逻辑里,先执行一次赋值再调用打印函数。
内容的提问来源于stack exchange,提问作者sai k
相关产品推荐
相关产品推荐

