首页 > 解决方案 > 单击阻止在 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

标签: pythontkinter

解决方案


好的,所以问题是当您第一次单击时,您调用的是 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)

这也将解决您的程序在长时间使用后滞后的问题。


推荐阅读