为何Tkinter中var.set(entry.get())返回None而非int?报错range需整数
问题解答:为什么
var1.set(E1.get())返回None? 嘿,我来帮你搞定这个问题~ 你遇到的错误根源其实很简单:Tkinter里的IntVar.set()方法本身就没有返回值(也就是返回None),它的作用只是把值设置到变量里,不会把设置好的值再返回给你。
你看你写的代码:
n = var1.set(E1.get())
这里var1.set(...)执行完后,只会把输入框的内容存入var1,但不会返回任何东西,所以n就被赋值成了None,后面用range(0, n)自然就会报错——因为range需要整数参数,你给了个None。
正确的做法分两步:
- 先调用
set把值存入变量(不需要赋值给任何变量) - 再用
get()方法从变量里取出整数,赋值给n
修正后的代码片段:
var1 = Tkinter.IntVar() E1 = Tkinter.Entry(root, textvariable=var1, bd=5) E1.pack(side=Tkinter.LEFT) # 第一步:把输入框的值设置到var1里(这一步不需要赋值) var1.set(E1.get()) # 第二步:从var1里取出整数 n = var1.get() # 甚至更简单:因为你已经把E1和var1绑定了(textvariable=var1), # 用户输入内容时var1会自动同步,所以直接get就行,不用手动set! # n = var1.get()
额外提醒:处理无效输入
如果用户在输入框里输入的不是整数,var1.get()会抛出TclError,建议加个异常处理避免崩溃:
try: n = var1.get() # 接下来执行你的range循环逻辑 except Tkinter.TclError: tkMessageBox.showerror("输入错误", "请输入有效的整数!")
内容的提问来源于stack exchange,提问作者user name
相关产品推荐
相关产品推荐

