在 tkinter 中动态调整浮点旋转框增量
Dynamically adjusting floating point spinbox increment in tkinter
我希望能够动态调整下面我的浮点数字微调框 (spin1
) 的增量。为此,我创建了第二个旋转框 (spin2
),其值为 (0.1, 0.01, 0.001, 0.0001)
,它确定 spin1
.
的步长
只要我总是从较粗的增量移动到较细的增量,这就可以正常工作。当我尝试从更精细的增量移动到更粗略的增量时它失败了,因为值被截断到增量的精度。
使用下面的代码,问题可以重现:
将spin1
移动到0.2
:
增加spin2
,对0.01
说:
增加 spin1
到 0.21
:
减 spin2
回到 0.1
:
递减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()
补充观察:
- 微调器总是截断值而不是四舍五入。所以如果在第3步中将
spin1
设置为2.6
,最终结果仍然是0.1
,而不是0.2
.
您可以将format="%.4f"
(基于spin2
的0.0001
的最大小数点)添加到spin1
:
spin1 = Spinbox(window, from_=0.0, to=10.0, increment=0.1, format="%.4f")
我希望能够动态调整下面我的浮点数字微调框 (spin1
) 的增量。为此,我创建了第二个旋转框 (spin2
),其值为 (0.1, 0.01, 0.001, 0.0001)
,它确定 spin1
.
只要我总是从较粗的增量移动到较细的增量,这就可以正常工作。当我尝试从更精细的增量移动到更粗略的增量时它失败了,因为值被截断到增量的精度。
使用下面的代码,问题可以重现:
将
spin1
移动到0.2
:增加
spin2
,对0.01
说:增加
spin1
到0.21
:减
spin2
回到0.1
:递减
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()
补充观察:
- 微调器总是截断值而不是四舍五入。所以如果在第3步中将
spin1
设置为2.6
,最终结果仍然是0.1
,而不是0.2
.
您可以将format="%.4f"
(基于spin2
的0.0001
的最大小数点)添加到spin1
:
spin1 = Spinbox(window, from_=0.0, to=10.0, increment=0.1, format="%.4f")