在 tkinter 中动态调整浮点 Spinbox 增量

问题描述

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

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

使用下面的代码,这里是如何重现问题:

  1. spin1 移至 0.2

    enter image description here

  2. 增加 spin2,对 0.01 说:

    enter image description here

  3. spin1 增加0.21

    enter image description here

  4. spin2 递减回 0.1

    enter image description here

  5. 递减spin1

    enter image description here

我希望在 0.11 中看到值 spin1,但我看到的是 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.0001),command=update)
spin1.pack()
spin2.pack()
window.mainloop()

补充观察:

  • 微调器总是截断值而不是四舍五入。因此,如果在步骤 3 中将 spin1 设置为 2.6,最终结果仍将是 0.1,而不是 0.2

解决方法

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

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