我有一个Tkinter GUI,其中有一个Scale
对象。我有一个回调(由command
构造函数参数)分配,以在用户更改比例位置时执行操作。但是,还有一种情况是外部修改了刻度表示的值,因此我使用Scale.set()
设置了刻度位置。在这种情况下,我想设置比例,但是 not 会触发回调,因为程序的其余部分已经知道了更改。但是,我注意到回调确实是由set()
触发的。
是否可以执行以下操作之一:
设置比例值而不触发回调。
区分回调是否由用户互动或Scale.set()
被调用。
感谢。
答案 0 :(得分:2)
Tkinter没有特别内置的解决方案。这实际上是一个简单的问题:删除回调,设置值,添加回调。或者,设置一个全局标志并在回调中检查该标志。
有很多方法可以解决这个问题 - 例如,将小部件子类化 - 但这并不能真正为你带来任何好处。只需使用简单的解决方案,然后继续讨论更多有趣的问题。
答案 1 :(得分:1)
我遇到了同样的问题,既没有禁止回调,也没有设置全局变量来检查回调状态对我有用,因为某些晦涩的原因,在我的代码运行完后,回调一直被调用。
尽管如此,对我有用的解决方案很简单:我在小部件中使用了一个变量,并使用变量的set
方法而不是小部件中的一个来设置值。
value = DoubleVar()
scale = Scale(master, variable=value, command=callback)
scale.pack()
scale.set(0) #<- this triggered the callback, no matter what I tried to stop it
value.set(0) #<- this seems to work like the previous line but without any callback