python - Tkinter,Python - 在不触发回调的情况下更改 slider 值

标签 python python-2.7 tkinter slider

我在 Tkinter 中使用 Scale 小部件来控制对象在另一个程序中的位置。用户既可以在 GUI 中移动 slider ,也可以直接从外部程序中移动对象。我希望 slider 值始终显示对象的当前位置。我遇到的问题是,移动 slider 和使用 set 方法以编程方式设置 slider 都会调用 Scale 小部件的回调。我只想在物理移动时调用它。

到目前为止我尝试了什么:

遵循 this 的建议回答,我尝试使用标志并在调用 set 之前禁用回调,但这在我的情况下并不奏效。设置和读取对象的位置存在时间延迟,我认为这是导致问题的原因(我构建了一个玩具示例,其中 slider 刚刚连接到另一个 slider ,并且标志解决方案有效,但它不起作用对于我的实际应用程序)。我还使用 after 函数定期检查物理对象是否移动。我不确定这是否是最好的方法或者是否会影响任何东西(它可能允许标志在部分代码中处于错误状态)。

我想我必须尝试将小部件子类化的建议,然后制作我自己的 set 方法版本,该方法设置一个值,但不调用回调。不过,我不确定该怎么做,并且通过浏览小部件的源代码,我不太清楚这一切发生在哪里。任何帮助将不胜感激,谢谢!

最佳答案

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

尽管如此,对我有用的解决方案很简单:我在小部件中使用了一个变量,并使用变量的 set 方法而不是小部件的方法设置值。

value = DoubleVar()
scale = Scale(master, variable=value, command=callback)
scale.pack()

scale.set(0) #<- this triggers the callback, no matter what I tried to stop it
value.set(0) #<- this works like the previous line but without any callback

关于python - Tkinter,Python - 在不触发回调的情况下更改 slider 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910363/

相关文章:

python - 正确值的文件输出错误

Python 2.7 向后移植 : enum classes are not instances of abstact enum classes

postgresql - AWS - 通过 EC2 隧道连接到 RDS

python - 我怎样才能调整我的按钮大小

python - 如何通过按下按钮隐藏框架的一部分

Python - 从临时文件中写入和读取

python - 从 csv 堆叠文件创建 pandas DataFrame

python--我们可以使用psutil找到正在运行的进程的目录吗?

python - 圣人数学 : running `make` ends with ImportError in dochtml phase

Python - Tkinter 标签中多变量句子中一个变量的文本颜色