我有一个Entry
与IntVar
绑定,但是调用my_int_var.get()
会引发异常,似乎在抱怨该变量是一个空字符串。我只希望用户在该字段中输入整数。
除了捕获TclError
以外,还有更好的解决方案吗?
这是我要避免的追溯:
|| Traceback (most recent call last):
|| File "Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
|| return self.func(*args)
|| File "/gui.py", line 172, in callback
|| print(f"Value is now: {my_int_var.get()}")
|| File "Python36-32\lib\tkinter\__init__.py", line 507, in get
|| return int(self._tk.getdouble(value))
|| _tkinter.TclError: expected floating-point number but got ""
这是在与my_int_var
的{{1}}调用相关的回调中触发的。通过使用鼠标选择所有文本并按退格键来删除.trace()
的内容时,会引发异常,并导致空白值。
这里有一些代码,您可以运行自己来重现该问题,而无需使用鼠标:
Entry
答案 0 :(得分:0)
由于变量为空,您收到错误。您可以使用以下方法将初始值设置为0,以防止出现此错误:
var.set(0)
而且,您无需从条目中删除数据,因为创建条目时,该条目为空。因此删除行:
entry.delete(0, tk.END)
这是一个代码:
import tkinter as tk
root = tk.Tk()
var = tk.IntVar()
entry = tk.Entry(textvariable=var)
var.set(0) #<-- Set the value to 0
var.get() #<-- Working
编辑:
您可以使用try
/ except
语句。这是语句的工作:
import tkinter as tk
root = tk.Tk()
var = tk.IntVar()
entry = tk.Entry(textvariable=var)
entry.pack()
var.set(0) #<-- Set the value to 0
def _get():
try:var.get()
except:var.set(0)
tk.Button(text="Press",command=_get).pack()
root.mainloop()
#var.get() #<-- Working
按下按钮时,如果条目为空,则其值将设置为0。