Python Tkinter中如何实现点击Entry外部才销毁对应输入框组件
问题原因
Tkinter的事件默认会向上冒泡传递,你点击输入框时,点击事件会先被输入框接收,之后继续传递给父容器,最终触发根窗口绑定的<Button-1>事件,所以点击输入框内部也会执行销毁逻辑。
解决方法
你可以任选以下两种方案实现需求:
方案1:在销毁逻辑中添加点击源判断
直接修改rename_cancel方法,判断点击的控件是否为输入框,是则直接跳过销毁逻辑,原有绑定不需要修改:
def rename_cancel(self, event): # 点击目标为输入框时,不执行销毁 if event.widget == self.rename_entry_mpf or event.widget == self.rename_entry_db: return # 原有逻辑保持不变 if self.rename_act_mpf == 1: self.rename_entry_mpf.destroy() self.rename_act_mpf = 0 if self.rename_act_db == 1: self.rename_entry_db.destroy() self.rename_act_db = 0
方案2:阻止输入框的点击事件向上冒泡
在创建两个输入框时,单独绑定点击事件并返回break,让输入框的点击事件不会传递到根窗口,不需要修改原有rename_cancel逻辑:
# 创建输入框后添加如下绑定 self.rename_entry_mpf.bind("<Button-1>", lambda e: "break") self.rename_entry_db.bind("<Button-1>", lambda e: "break")
内容的提问来源于stack exchange,提问作者racoonisracoonracoon
相关产品推荐
相关产品推荐

