Python Tkinter回调中出现异常,“u Tkinter.TclError:应为整数,但得到”&引用;

Python Tkinter回调中出现异常,“u Tkinter.TclError:应为整数,但得到”&引用;,python,tkinter,callback,Python,Tkinter,Callback,我正在尝试创建一行条目小部件,它们向上添加数值,并将总数输入到最左边的列中。我能够生成代码函数,但每当我尝试在变量类上使用get()方法时,它都会引发异常。以下是一个例子: from tkinter import * root = Tk() ent1 = IntVar() ent2 = IntVar() ent3 = IntVar() def callback(*args): ent1.set(ent2.get() + ent3.get()) frame = Frame(ro

我正在尝试创建一行条目小部件,它们向上添加数值,并将总数输入到最左边的列中。我能够生成代码函数,但每当我尝试在变量类上使用get()方法时,它都会引发异常。以下是一个例子:

from tkinter import *

root = Tk()

ent1 = IntVar()
ent2 = IntVar()
ent3 = IntVar()


def callback(*args):
    ent1.set(ent2.get() + ent3.get())


frame = Frame(root)
frame.pack()

entry1 = Entry(frame, width=5, textvariable=ent1)
entry2 = Entry(frame, width=5, textvariable=ent2)
entry3 = Entry(frame, width=5, textvariable=ent3)

entry1.pack(side=LEFT)
entry2.pack(side=LEFT)
entry3.pack(side=LEFT)

ent1.trace_add('write', callback)
ent2.trace_add('write', callback)
ent3.trace_add('write', callback)

root.mainloop()
这里有一个例外:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Paul Desktop\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 508, in get
    return self._tk.getint(value)
_tkinter.TclError: expected integer but got ""

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Paul Desktop\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/Paul Desktop/PycharmProjects/Pathfinder Character Sheet/EntryTest.py", line 15, in callback
    ent1.set(ent2.get() + ent3.get())
  File "C:\Users\Paul Desktop\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 510, in get
    return int(self._tk.getdouble(value))
_tkinter.TclError: expected floating-point number but got ""
我不知道为什么会发生这种情况,我需要一些帮助来做什么

就像在我的中所说的,当您将输入框上的所有内容退格时,值为
,然后尝试保存到
IntVar()
,我们知道
IntVar()
不能有字符串值,它可以是0或任何其他整数。所以要解决这个问题,我们首先需要只接受用户的整数值。看看这个,了解如何做到这一点

我已经更改了您的代码并使其更加优化,通过将输入限制为仅整数,并检查任何条目小部件是否为空,我们可以避免所有这些错误

完整代码:

从tkinter导入*
def回调(文本,wid):
如果str.isdigit(文本)或not text:
text=如果文本为0,则为文本
如果wid==str(条目3):
n=entry2.get()如果entry2.get()否则为0
如果wid==str(条目2):
n=entry3.get()如果entry3.get()否则为0
ent1.set(int(n)+int(text))
返回真值
返回错误
root=Tk()
ent1=IntVar()
vcmd=(根寄存器(回调)、“%P”、“W”)
帧=帧(根)
frame.pack()
entry1=条目(框架,宽度=5,文本变量=ent1)
entry2=Entry(frame,width=5,validate='all',validatecommand=vcmd)
entry3=Entry(frame,width=5,validate='all',validatecommand=vcmd)
入口1.包装(侧面=左侧)
入口2.包装(侧面=左侧)
入口3.包装(侧面=左侧)
root.mainloop()

好的,当您将输入框上的所有内容退格时,值为
,然后尝试保存到
IntVar()
,我们知道它不能有字符串值0或整数。确保不会发生这种情况的最佳方法是什么?永远不要让输入框有
或除整数值以外的任何其他值。