如何在Tkinter中实现Listbox双击事件触发后禁用,点击按钮再恢复
实现方案
你可以通过新增开关变量控制双击事件的生效状态,修改后的完整代码如下:
from tkinter import * # 双击功能开关,初始为启用状态 double_click_enabled = True def go(event): global double_click_enabled # 开关未启用时直接跳过逻辑 if not double_click_enabled: return cs = Lb.curselection() # 刷新标签显示选中的选项 w.config(text=Lb.get(cs)) # 设置窗口背景色 for list in cs: if list == 0: top.configure(background='red') elif list == 1: top.configure(background='green') elif list == 2: top.configure(background='yellow') elif list == 3: top.configure(background='white') # 执行完成后关闭双击开关 double_click_enabled = False # 启用双击的按钮回调 def enable_double_click(): global double_click_enabled double_click_enabled = True top = Tk() top.geometry('250x275') top.title('Double Click') # 创建列表框 Lb = Listbox(top, height=6) # 插入列表选项 Lb.insert(0, 'Red') Lb.insert(1, 'Green') Lb.insert(2, 'Yellow') Lb.insert(3, 'White') # 绑定鼠标左键双击事件到go函数 Lb.bind('<Double-1>', go) Lb.pack() # 创建标签显示选中的选项 w = Label(top, text='Default') w.pack() # 创建启用双击功能的按钮 enable_btn = Button(top, text = 'Enable Double Click', command=enable_double_click) enable_btn.pack(pady = 10) top.mainloop()
核心修改点
- 新增全局变量
double_click_enabled作为双击功能的状态开关,初始值为True代表可用 - 双击事件处理函数
go开头增加开关校验,开关关闭时直接跳过所有业务逻辑;原有逻辑执行完成后自动将开关设为False,实现单次触发后自动失效的效果 - 为「Enable Double Click」按钮新增点击回调函数,触发时将双击开关重置为True,恢复双击功能
内容的提问来源于stack exchange,提问作者Kennerdol
相关产品推荐
相关产品推荐

