0

我已经使用 Python / tkinter 开发了一年,到目前为止,我在 stackoverflow 上找到了所有问题的答案 - 谢谢大家。所以这是我的第一个问题,我还没有找到答案……但是:为了运行一些更新过程,我跟踪Spinbox 的 IntVar 文本变量。更新过程使用 textvariable.get() 检索 textvariable 的值。单击向上/向下箭头或单击输入框并一次更改一位时,一切都很好。但是选择整个条目(例如双击)并开始覆盖它会给我以下错误:

Traceback (most recent call last):
  File "C:\Program Files\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:/Users/Utilisateur/Documents/TAO_Perf/Development/Apps/test/test.py", line 7, in val_update
    print(screen_val.get())
  File "C:\Program Files\Python38\lib\tkinter\__init__.py", line 537, in get
    return int(self._tk.getdouble(value))
_tkinter.TclError: expected floating-point number but got ""

这是一个要重现的代码片段:

import tkinter as tk

root = tk.Tk()

def val_update(*args):
    print(screen_val.get())

screen_val = tk.IntVar()
screen_val.set(10)
tk.Spinbox(root, textvariable=screen_val, from_=1, to=100).pack()
screen_val.trace("w", val_update)

root.mainloop()

我究竟做错了什么?似乎发生的是在记录第一次击键之前清除了输入字段并调用了跟踪函数。所以当调用 val_update() 跟踪函数时,文本变量是空的(“”对于 IntVar 来说很奇怪?)。

我可以忽略该错误,并且在第二次调用 trace 函数时一切正常,但我非常喜欢在运行我的代码时看到 Traceback。有关如何避免该错误的任何提示?谢谢你们

4

0 回答 0