Tkinter:设置'scale'值而不触发回调?

时间:2010-10-27 23:21:27

标签: python tkinter

我有一个Tkinter GUI,其中有一个Scale对象。我有一个回调(由command构造函数参数)分配,以在用户更改比例位置时执行操作。但是,还有一种情况是外部修改了刻度表示的值,因此我使用Scale.set()设置了刻度位置。在这种情况下,我想设置比例,但是 not 会触发回调,因为程序的其余部分已经知道了更改。但是,我注意到回调确实是由set()触发的。

是否可以执行以下操作之一:

  1. 设置比例值而不触发回调。

  2. 区分回调是否由用户互动或Scale.set()被调用。

  3. 感谢。

2 个答案:

答案 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