Tkinter中如何获取Entry组件输入并与指定字符串做比对
核心错误点
代码存在3处会导致功能失效的问题:
- Tkinter组件的
pack()/grid()/place()布局方法返回值固定为None,entry1 = Entry(window, width=30).pack()写法会让entry1变量值为None,无法持有Entry组件实例,自然无法调用get()方法。所有需要后续操作的组件,必须分开写创建、布局逻辑。 - 比对逻辑直接拿组件对象和字符串做判断,没有调用
get()方法读取Entry内的实际输入文本。 - 点击按钮时直接
pack()结果标签,没有提前移除已显示的标签,多次点击后两个标签会在界面堆叠。
修正后可运行代码
from tkinter import * window = Tk() window.geometry("800x600") window.title("Sara's chocolate balls") def Button_Click(): # 每次判断前先隐藏两个结果标签,避免组件堆叠 test2.pack_forget() test3.pack_forget() target_text = "hey" # 读取Entry输入内容后再做比对 user_input = entry1.get() test2.pack() if user_input == target_text else test3.pack() # 先创建组件赋值给变量,再单独执行布局操作 entry1 = Entry(window, width=30) entry1.pack() Button1 = Button(window, text="Button", command=Button_Click) Button1.pack() test2 = Label(window, text="Good") test3 = Label(window, text="Bad") window.mainloop()
关键注意事项
- 只要后续需要读取、修改组件属性/内容,就不能在创建组件时链式调用布局方法直接赋值,必须将组件实例赋值给变量后,单独调用布局方法。
- Entry组件的输入内容为字符串类型,通过
组件实例.get()即可获取,可直接与预定义的字符串做等值判断。 - 若需要切换同位置显示的组件,可通过
pack_forget()/grid_forget()方法临时隐藏不需要显示的组件。
内容的提问来源于stack exchange,提问作者ido rozen
相关产品推荐
相关产品推荐

