我正在使用Python 2.6.5和TKinter.TkVersion 8.5
这是越野车行为的MWE:
import Tkinter as tk
root = tk.Tk()
classic_var = tk.IntVar()
classic_var.set(2)
classic_spinbox = tk.Spinbox(root, from_=0, to=3,textvariable=classic_var)
classic_spinbox.pack()
values_var = tk.IntVar()
values_var.set(2)
values_spinbox = tk.Spinbox(root, values=(0, 1, 2, 3), textvariable=values_var)
values_spinbox.pack()
print classic_var.get() #expected : 2, actual : 2
print values_var.get() #expected : 2, actual : 0
root.mainloop()
我希望即使在Spinbox初始化之后,value_var仍为“ 2”。
在这里,您可以看到结果的屏幕截图:
这是一个已知的错误吗?除此之外,还有其他解决方法吗?
initial_value = 2
values_var = tk.IntVar()
values_spinbox = tk.Spinbox(root, ...
values_var.set(initial_value)
最佳答案
从自己进行测试以及进行一些研究后,最好的方法就是执行您建议的解决方法,即在初始化后设置默认值。
我实际上是通过Google搜索从另一个用户那里找到的答案,哈哈:How can I establish a default String value on a Tkinter Spinbox?
实际上,由于值的编码方式,这是预期的行为。值的工作方式是在某种意义上覆盖其他参数,因此它将您在值中声明的第一个值用作初始值,而不是textvariable。我认为没有任何方法可以解决此问题。
供参考:https://www.tcl.tk/man/tcl8.4/TkCmd/spinbox.htm#M22然后单击值,它将进行解释。
关于python - Python Tkinter Spinbox似乎重置了变量值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41225071/