将按钮释放视为键盘中断tkinter

时间:2013-04-17 17:24:52

标签: python button tkinter release keyboardinterrupt

我在Python 3中使用tkinter来创建程序而且我被卡住了...... 我有无限循环,按下按钮触发:

def task13():
    while True:
        #do stuff

...

button13 = Button(root, width=25, text="13", command=task13)
goButton.pack(side=LEFT,anchor="n")

如何在发布按钮13时终止task13?是否有“键盘中断”代码或我可以修改循环吗?

2 个答案:

答案 0 :(得分:3)

无法中断正在运行的功能。但是,您可以在<ButtonRelease-1>上为该按钮设置绑定,并在该绑定中设置标志。然后,在task13中,您可以在循环顶部检查该标志。您还需要<ButtonPress-1>上的绑定来启动循环,因为command与按钮小部件上的鼠标按钮的释放相关联。

这仅适用于在循环中为服务事件提供服务的情况。如果#do stuff阻止事件循环,除了在单独的线程或进程中运行该代码之外,您无能为力。

答案 1 :(得分:1)

按钮包含"<Button-1><ButtonRelease-1>个事件:

from tkinter import *

def press(*args):
    print('press')
    global pressed
    pressed = True
    master.after(0, loop)

def release(*args):
    print('release')
    global pressed
    pressed = False

def loop():
    if pressed:
        print('loop')
        # Infinite loop without delay is bad idea.
        master.after(250, loop)

master = Tk()
pressed = False

b = Button(master, text="OK")
b.bind("<Button-1>", press)
b.bind("<ButtonRelease-1>", release)
b.pack()
mainloop()