Exception in Tkinter callback, _tkinter.TclError: expected integer but got ""
Exception in Tkinter callback, _tkinter.TclError: expected integer but got ""
我正在尝试制作一行 Entry 小部件,这些小部件将数值相加并将总数输入到最左边的列中。我能够使代码运行,但每当我尝试对变量 class 使用 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 ""
我不知道为什么会这样,我需要一些帮助才能做什么!
就像我在 , when you backspace everything on an entry box then the value is ""
which then tries to save to IntVar()
and as we know an IntVar()
cannot have a string value, it can either be 0 or any other integer. So to fix this we first need to accept only the integer values from the user. See this answer 中所说的那样,了解如何做到这一点。
我已经更改了您的代码并使其更加优化,方法是将输入限制为仅整数,并检查是否有任何 Entry 小部件为空我们可以避免所有这些错误。
完整代码:
from tkinter import *
def callback(text, wid):
if str.isdigit(text) or not text:
text = text if text else 0
if wid == str(entry3):
n = entry2.get() if entry2.get() else 0
if wid == str(entry2):
n = entry3.get() if entry3.get() else 0
ent1.set(int(n) + int(text))
return True
return False
root = Tk()
ent1 = IntVar()
vcmd = (root.register(callback), '%P', '%W')
frame = Frame(root)
frame.pack()
entry1 = Entry(frame, width=5, textvariable=ent1)
entry2 = Entry(frame, width=5, validate='all', validatecommand=vcmd)
entry3 = Entry(frame, width=5, validate='all', validatecommand=vcmd)
entry1.pack(side=LEFT)
entry2.pack(side=LEFT)
entry3.pack(side=LEFT)
root.mainloop()
我正在尝试制作一行 Entry 小部件,这些小部件将数值相加并将总数输入到最左边的列中。我能够使代码运行,但每当我尝试对变量 class 使用 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 ""
我不知道为什么会这样,我需要一些帮助才能做什么!
就像我在 ""
which then tries to save to IntVar()
and as we know an IntVar()
cannot have a string value, it can either be 0 or any other integer. So to fix this we first need to accept only the integer values from the user. See this answer 中所说的那样,了解如何做到这一点。
我已经更改了您的代码并使其更加优化,方法是将输入限制为仅整数,并检查是否有任何 Entry 小部件为空我们可以避免所有这些错误。
完整代码:
from tkinter import *
def callback(text, wid):
if str.isdigit(text) or not text:
text = text if text else 0
if wid == str(entry3):
n = entry2.get() if entry2.get() else 0
if wid == str(entry2):
n = entry3.get() if entry3.get() else 0
ent1.set(int(n) + int(text))
return True
return False
root = Tk()
ent1 = IntVar()
vcmd = (root.register(callback), '%P', '%W')
frame = Frame(root)
frame.pack()
entry1 = Entry(frame, width=5, textvariable=ent1)
entry2 = Entry(frame, width=5, validate='all', validatecommand=vcmd)
entry3 = Entry(frame, width=5, validate='all', validatecommand=vcmd)
entry1.pack(side=LEFT)
entry2.pack(side=LEFT)
entry3.pack(side=LEFT)
root.mainloop()