在 tkinter 中动态调整浮点旋转框增量

Dynamically adjusting floating point spinbox increment in tkinter

我希望能够动态调整下面我的浮点数字微调框 (spin1) 的增量。为此,我创建了第二个旋转框 (spin2),其值为 (0.1, 0.01, 0.001, 0.0001),它确定 spin1.

的步长

只要我总是从较粗的增量移动到较细的增量,这就可以正常工作。当我尝试从更精细的增量移动到更粗略的增量时它失败了,因为值被截断到增量的精度。

使用下面的代码,问题可以重现:

  1. spin1移动到0.2:

  2. 增加spin2,对0.01说:

  3. 增加 spin10.21:

  4. spin2 回到 0.1:

  5. 递减spin1:

我希望在 spin1 中看到值 0.11,但我看到的却是 0.1。为什么会发生这种情况,我该如何解决?

from tkinter import Tk, Spinbox

def update():
    spin1['increment'] = float(spin2.get())

window = Tk()
spin1 = Spinbox(window, from_=0.0, to=10.0, increment=0.1)
spin2 = Spinbox(window, values=(0.1, 0.01, 0.001, 0.0001), command=update)
spin1.pack()
spin2.pack()
window.mainloop()

补充观察:

您可以将format="%.4f"(基于spin20.0001的最大小数点)添加到spin1:

spin1 = Spinbox(window, from_=0.0, to=10.0, increment=0.1, format="%.4f")