如何在Tkinter中判断Spinbox整数值并输出Saved/Error提示
解决Tkinter Spinbox与IntVar绑定后的类型判断问题
你的代码判断逻辑错误的核心原因是:self.C是IntVar对象,不是整数类型,直接用type(self.C) == int判断永远会得到False,根本没拿到Spinbox的实际输入值。
下面是两种正确的处理方案:
方案一:利用IntVar的自动校验特性
因为你绑定了IntVar,它会自动尝试将Spinbox的输入转换为整数,若输入无法转换为有效整数,调用get()方法时会抛出ValueError。我们可以通过捕获这个异常来判断:
def save(self): try: # 尝试获取IntVar存储的值,非整数输入会触发ValueError value = self.C.get() # 能成功获取说明是有效整数,显示Error self.A.configure(text="Error") except ValueError: # 捕获异常说明输入不是有效整数,显示Saved self.A.configure(text="Saved")
方案二:直接获取输入字符串并判断
如果不想依赖IntVar的自动校验,可以直接获取Spinbox的输入字符串,自行判断是否为整数:
def save(self): input_str = self.label3_1_1Spinbox.get() # 处理正负整数的情况,先去除左侧负号再判断是否全为数字 if input_str.lstrip('-').isdigit(): self.A.configure(text="Error") else: self.A.configure(text="Saved")
注意:第二种方案里的lstrip('-')是为了兼容负整数的判断,如果你的场景不允许负数,可以直接用input_str.isdigit()。
内容的提问来源于stack exchange,提问作者roru
相关产品推荐
相关产品推荐

