Python-Tkinter中if-else循环无法输出对应值的问题求助
问题分析与修复方案
嘿,我来帮你搞定这个问题!你遇到的“不管输入啥都显示4”的情况,是因为两个容易踩的小坑导致的,咱们一步步捋清楚:
核心问题在哪?
类型不匹配:字符串 vs 整数
你用entry.get()获取输入框的内容时,得到的是字符串类型,但你却把它和整数0011、0100做比较——这俩完全不是一个类型,永远不可能相等,所以每次都会触发else分支,显示数字4。八进制整数的隐藏陷阱
在Python 2里,以0开头的整数会被当作八进制数解析,比如0011实际等于十进制的9,0100等于十进制的64,这和你想要匹配的四位数字完全不是一回事,哪怕你把输入转成整数,结果也不对。
修复后的代码
我给你调整了代码,解决了这两个问题:
from Tkinter import* from math import* root = Tk() root.title('Barcode Reader') #代码标题 text1 = StringVar() #初始化text1 text1.set('0') #初始化text1 entry=Entry(root) #输入框组件 entry.pack() def check(): user_input = entry.get().strip() # 去除输入前后的空格,避免误判 if user_input == '0011': # 改成字符串匹配,和输入类型一致 text1.set('2') #对应0011的数值 elif user_input == '0100': text1.set('3') #对应0100的数值 else: text1.set('4') button=Button(root, text='check', command=check) #按钮定义 button.pack() label=Label(root, textvariable=text1) #用于显示结果的标签 label.pack() mainloop()
关键修改点说明
- 把匹配目标从整数
0011改成了字符串'0011',确保和entry.get()返回的类型一致,这样才能正确匹配; - 新增了
.strip()方法,用来去除输入内容前后的空格,防止用户不小心输入空格导致匹配失败; - 把输入内容存到
user_input变量里,让代码逻辑更清晰易读。
现在你再运行代码,输入0011就会显示2,输入0100显示3,其他输入显示4啦!
内容的提问来源于stack exchange,提问作者PKE Kumar
相关产品推荐
相关产品推荐

