<p>你可以做的是让按钮触发一个功能,改变音量,然后安排自己在一段时间后(例如100毫秒)再次运行。然后,当按钮被释放时,您可以取消预定的重复功能,该功能会改变音量以中断循环。你知道吗</p>
<p>我对你的代码做了一点修改,来举个例子:</p>
<pre class="lang-py prettyprint-override"><code>from tkinter import *
win = Tk()
def volumeUpPress(e=None):
global up_after
currentVolume = volumeSlider.get()
volumeSlider.set(currentVolume + 2)
up_after = win.after(100, volumeUpPress)
def volumeUpRelease(e=None):
global up_after
win.after_cancel(up_after)
def volumeDownPress(e=None):
global down_after
currentVolume = volumeSlider.get()
volumeSlider.set(currentVolume - 2)
down_after = win.after(100, volumeDownPress)
def volumeDownRelease(e=None):
global down_after
win.after_cancel(down_after)
volumeSlider = Scale(win, from_=0, to=100, orient=HORIZONTAL)
volumeSlider.pack()
volumeDownButton = Button(win, text = "-", height = 1, width = 1)
volumeDownButton.pack(side = BOTTOM)
volumeDownButton.bind("<Button-1>", volumeDownPress)
volumeDownButton.bind("<ButtonRelease-1>", volumeDownRelease)
volumeUpButton = Button(win, text = "+", height = 1, width = 1)
volumeUpButton.pack(side = BOTTOM)
volumeUpButton.bind("<Button-1>", volumeUpPress)
volumeUpButton.bind("<ButtonRelease-1>", volumeUpRelease)
win.mainloop()
</code></pre>
<p>注意事项:</p>
<ul>
<li>我没有使用按钮的<code>command</code>,因为这不能让您灵活地知道按钮何时被释放。相反,我做了两个绑定,一个是按下按钮时绑定,一个是松开按钮时绑定。你知道吗</li>
<li>我使用<code>after</code>方法在设置的毫秒数之后安排对同一函数的新调用,我将对该计划函数的引用保存在全局变量中,以便能够在release函数中再次使用它来用<code>after_cancel</code>取消它</li>
<li><code>.bind</code>用一个事件对象调用函数,而<code>after</code>调用一个没有参数的函数,因为两者都调用同一个函数,所以我这样做是为了可以用参数和没有参数调用函数(<code>e=None</code>)</li>
</ul>