У меня 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 ""
Это срабатывает при обратном вызове, связанном с .trace()
*1013*.Исключение выдается, когда вы удаляете содержимое Entry
, выделяя мышью весь текст и нажимая клавишу Backspace, что приводит к пустому значению.
Вот код, который вы можете запустить самостоятельно, чтобы воспроизвести проблему, без использования мыши:
import tkinter as tk
root = tk.Tk()
my_int_var = tk.IntVar()
entry = tk.Entry(textvariable=my_int_var)
entry.delete(0, tk.END)
my_int_var.get() #throws TclError