2024-09-30 02:27:38 发布
网友
我用Python3中的tkinter来创建一个程序,我被卡住了。。。 我有无限循环,由按钮按下触发:
def task13(): while True: #do stuff ... button13 = Button(root, width=25, text="13", command=task13) goButton.pack(side=LEFT,anchor="n")
松开按钮13后,如何终止task13?是否有“键盘中断”代码或我可以修改循环?在
无法中断正在运行的函数。但是,您可以在按钮的<ButtonRelease-1>上设置绑定,并在该绑定中设置标志。然后,在task13中,您可以在循环的顶部检查该标志。您还需要在<ButtonPress-1>上绑定以启动循环,因为command与按钮小部件上鼠标按钮的释放有关。在
<ButtonRelease-1>
task13
<ButtonPress-1>
command
只有在循环中为事件提供服务时,这才有效。如果#do stuff阻塞了事件循环,那么除了在单独的线程或进程中运行该代码之外,您无能为力。在
#do stuff
按钮有"<Button-1>和<ButtonRelease-1>事件:
"<Button-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()
无法中断正在运行的函数。但是,您可以在按钮的
<ButtonRelease-1>
上设置绑定,并在该绑定中设置标志。然后,在task13
中,您可以在循环的顶部检查该标志。您还需要在<ButtonPress-1>
上绑定以启动循环,因为command
与按钮小部件上鼠标按钮的释放有关。在只有在循环中为事件提供服务时,这才有效。如果
#do stuff
阻塞了事件循环,那么除了在单独的线程或进程中运行该代码之外,您无能为力。在按钮有
"<Button-1>
和<ButtonRelease-1>
事件:相关问题 更多 >
编程相关推荐