【发布时间】:2019-10-29 11:05:18
【问题描述】:
我正在使用 tkinter 列表框编写一个类似 Explorer 的应用程序。双击时,我想进入选定的文件夹,所以我清除列表并输入文件夹内容。
当我双击后直接点击时,仍然认为是新的双击。因此,没有执行单击,这意味着没有选择列表框条目,并且在我再次真正双击之前发生了变化。
有没有办法“重置”双击,这样我的程序就会认为下一次单击是单击,无论我之前做了什么?
我尝试使用单击事件坐标来获取“双击”条目,但是此将在第三次而不是第四次单击时触发,这是不希望的行为。我还尝试绑定三次单击以阻止第二次双击,但是如果我单击超过 3 次,程序将不会响应,并且只有在延迟后才会再次响应。
import tkinter as tk
import random
def fill_box(event):
"""Clear and refresh listbox"""
try:
listbox.get(listbox.curselection()[0])
selection = True
except IndexError:
selection = False
print("Event:", event, "Selection:", selection)
listbox.delete(0, tk.END)
for _ in range(10):
listbox.insert(tk.END, random.randint(0, 1000))
root = tk.Tk()
listbox = tk.Listbox(root)
for _ in range(10):
listbox.insert(tk.END, random.randint(0, 1000))
listbox.bind("<Double-Button-1>", fill_box)
# listbox.bind("<Triple-Button-1>", lambda x: 1) # Triple click
listbox.pack()
root.mainloop()
我的期望是,在我双击一个条目后,我可以立即再次与 GUI 交互,而无需等待双击冷却时间过去。另外,我不想通过(相对于当前视图)单击来双击新条目。
【问题讨论】:
标签: python tkinter listbox mouseevent