1

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

def task13():
    while True:
        #do stuff

...

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

如何在释放 button13 时终止 task13?是否有“键盘中断”代码或者我可以修改循环?

4

2 回答 2

3

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

这仅在您在循环中为事件提供服务时才有效。如果#do stuff阻塞了事件循环,则您无能为力,只能在单独的线程或进程中运行该代码。

于 2013-04-17T17:44:58.180 回答
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()
于 2013-04-17T17:45:37.440 回答