python - 单击阻止在 tkinter 中双击
问题描述
我有一个 GUI,我将两个事件绑定到这样的标签:
self.label.bind('<Button-1>', self.single)
self.label.bind('<Double-1>', self.double)
问题是,即使我双击标签,也不会调用'double'函数,而会调用'single'函数两次。
看起来单击事件正在阻止双击事件,因为如果我删除单击事件行,我通常可以调用“双击”函数。
我阅读了文档,并且从我得到的内容中应该可以捕获这两个事件,但事实并非如此。
无论如何,我尝试了这个简单的脚本,它捕获了这两个事件
from tkinter import *
def single(event):
print('single click')
def double(event):
print('double click')
widget = Button(None, text='Hello event world')
widget.pack()
widget.bind('<Button-1>', single)
widget.bind('<Double-1>', double)
widget.mainloop()
然后我不明白为什么它在第一个脚本中不起作用。如果需要,我可以发布整个文件。谢谢 :)
原始文件:https ://github.com/matte980/ExplorerFile/blob/main/ObjectsPublish.py
解决方案
好的,所以问题是当您第一次单击时,您调用的是 move(),它调用了 elements(),它重新创建了所有小部件。因此,您的第二次点击是对新小部件的第一次点击。
要解决此问题,您需要更新小部件属性,而不是使用新属性重新创建小部件。例如,要更新背景颜色:
def select(self, event):
print('selected')
for folder in folderList:
if folder.backgroundColor != '#ffffff':
folder.chg_background('#ffffff')
self.chg_background('#ffff00')
def chg_background(self, color):
self.backgroundColor = color
self.image.config(bg = color)
self.label.config(bg = color)
self.frame.config(bg = color)
这也将解决您的程序在长时间使用后滞后的问题。
推荐阅读
- java - 如何关闭字符串连接优化
- snowflake-cloud-data-platform - 我需要什么角色才能在雪花安全视图上运行 get_ddl(object_type, object_name)?
- cordova - 如何使用“插件安装”?我收到“名称太长”错误
- javascript - 类型错误:无法读取未定义的属性“forEach”
- ruby-on-rails - 为每个数组项创建新对象
- jquery - JQuery - 返回默认功能
- c - 使用允许更改端口的 UDP 客户端-服务器实现同步协议
- c# - .net core mvc 使用 Autofac 将 EF dbcontext 注入到 Startup 中的 AddIdentity 方法
- python - 如何按列分组,并计算单独列中的值(熊猫)
- go - goroutine channel & WaitGroup 致命错误:所有 goroutines 都处于睡眠状态 - 死锁