Tkinter:设置“比例”值而不触发回调?

Ste*_*eve 6 python tkinter

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

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

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

  2. 区分回调是由用户交互触发还是被Scale.set()调用触发。

谢谢。

jad*_*dsq 6

我遇到了同样的问题,既不抑制回调也不设置全局变量来检查回调状态对我有用,由于某种不明原因,在我的代码完成运行后,回调不断被调用。

尽管如此,对我有用的解决方案很简单:我在小部件中使用了一个变量,并使用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
Run Code Online (Sandbox Code Playgroud)


Bry*_*ley 3

Tkinter 没有专门内置任何东西来解决这个问题。不过,这确实是一个简单的问题要解决:删除回调,设置值,添加回调。或者,设置一个全局标志并在回调中检查该标志。

有很多方法可以解决这个问题——例如,对小部件进行子类化——但这并不能真正给你带来任何好处。只需采用简单的解决方案,然后继续解决更有趣的问题。