Tkinter按键绑定问题:点击NO后无法再次触发退出确认流程
问题分析与解决
问题出在按下NO按键后,只解绑了stop函数,但没有将<Key>事件重新绑定回menuKeys函数。
初始状态下,你给<Key>事件绑定的是menuKeys,触发退出按键后,你把绑定换成了stop。当用户按下NO时,你执行win.unbind("<Key>", stop)解绑了stop,但此时<Key>事件没有绑定任何处理函数,后续再按退出按键根本不会触发menuKeys的逻辑,自然无法重新唤起退出确认流程。
修复代码
修改stop函数的elif分支,在解绑stop后重新绑定menuKeys:
def stop(event): if event.keysym == settings["keys"]["prompt-keys"]["yes"]: win.destroy() elif event.keysym == settings["keys"]["prompt-keys"]["no"]: x,y = blockPoint("center") x -= 6 y -= 3 for i in range(5): for j in range(10): Spot(x+j,y,color="#232627",outline="#232627") y += 1 win.unbind("<Key>", stop) # 重新绑定回menuKeys,恢复初始按键处理逻辑 win.bind("<Key>", menuKeys) else: win.bind("<Key>", stop)
额外说明:Tkinter中unbind如果只传事件类型会解绑该事件的所有绑定,你这里用win.unbind("<Key>", stop)的写法是正确的,只要是同一个函数对象就能精准解绑。
内容的提问来源于stack exchange,提问作者Felix508
相关产品推荐
相关产品推荐

