2024-05-13 10:08:18 发布
网友
我使用滑块来更新我的可视化效果,但是每次移动滑块拇指时都会发送updateValue命令,即使对于中间值也是如此。
相反,我只想在释放鼠标按钮并且交互完成时触发它。
self.slider = tk.Scale(self.leftFrame, from_=0, to=256, orient=tk.HORIZONTAL, command=updateValue)
如何在交互结束时仅触发一次函数?
你不能
相反,您可以使用“after”命令在短时间内延迟任何实际工作。每次调用命令时,请取消所有挂起的工作并重新安排工作。根据您的实际需求,半秒的延迟可能就足够了。
另一种选择是不使用内置命令功能,而是使用自定义绑定。这可能是很多工作,以获得正确的,但如果你真的需要细粒度的控制,你可以做到这一点。别忘了,除了鼠标之外,还可以使用键盘与小部件交互。
下面是一个简短的示例,演示如何在半秒钟内安排要完成的工作:
import Tkinter as tk #create window & frames class App: def __init__(self): self.root = tk.Tk() self._job = None self.slider = tk.Scale(self.root, from_=0, to=256, orient="horizontal", command=self.updateValue) self.slider.pack() self.root.mainloop() def updateValue(self, event): if self._job: self.root.after_cancel(self._job) self._job = self.root.after(500, self._do_something) def _do_something(self): self._job = None print "new value:", self.slider.get() app=App()
现在这是一个很古老的问题,但是如果有人偶然发现这个问题,只需使用bind()函数和“ButtonRelease-1”事件,如下所示:
import Tkinter as tk class App: def __init__(self): self.root = tk.Tk() self.slider = tk.Scale(self.root, from_=0, to=256, orient="horizontal") self.slider.bind("<ButtonRelease-1>", self.updateValue) self.slider.pack() self.root.mainloop() def updateValue(self, event): print self.slider.get() app=App()
希望这对任何人都有帮助!
你不能
相反,您可以使用“after”命令在短时间内延迟任何实际工作。每次调用命令时,请取消所有挂起的工作并重新安排工作。根据您的实际需求,半秒的延迟可能就足够了。
另一种选择是不使用内置命令功能,而是使用自定义绑定。这可能是很多工作,以获得正确的,但如果你真的需要细粒度的控制,你可以做到这一点。别忘了,除了鼠标之外,还可以使用键盘与小部件交互。
下面是一个简短的示例,演示如何在半秒钟内安排要完成的工作:
现在这是一个很古老的问题,但是如果有人偶然发现这个问题,只需使用bind()函数和“ButtonRelease-1”事件,如下所示:
希望这对任何人都有帮助!
相关问题 更多 >
编程相关推荐