<p>按下按钮时设置标志,松开按钮时取消设置标志。不需要循环,因为您已经在运行循环(<code>mainloop</code>)</p>
<pre><code>from Tkinter import *
running = False
root = Tk()
def start_motor(event):
global running
running = True
print("starting motor...")
def stop_motor(event):
global running
print("stopping motor...")
running = False
button = Button(root, text ="forward")
button.pack(side=LEFT)
button.bind('<ButtonPress-1>',start_motor)
button.bind('<ButtonRelease-1>',stop_motor)
root.mainloop()
</code></pre>
<p>假设您确实想在按下键时执行某些操作,则可以使用<code>after</code>设置动画循环。例如,要在按下按钮时每秒调用一次print语句,可以添加一个函数来执行print语句,然后在一秒钟后安排调用它自己。停止按钮只需要取消任何挂起的作业。</p>
<p>这里有一个例子。与原始代码的主要区别是添加了一个<code>move</code>函数。我还添加了第二个按钮,以显示如何使用相同的功能前进或后退。</p>
<pre><code>from Tkinter import *
running = False
root = Tk()
jobid = None
def start_motor(direction):
print("starting motor...(%s)" % direction)
move(direction)
def stop_motor():
global jobid
root.after_cancel(jobid)
print("stopping motor...")
def move(direction):
global jobid
print("Moving (%s)" % direction)
jobid = root.after(1000, move, direction)
for direction in ("forward", "backward"):
button = Button(root, text=direction)
button.pack(side=LEFT)
button.bind('<ButtonPress-1>', lambda event, direction=direction: start_motor(direction))
button.bind('<ButtonRelease-1>', lambda event: stop_motor())
root.mainloop()
</code></pre>