【发布时间】:2021-05-09 14:51:37
【问题描述】:
据我了解,Tk/Tkinter Listbox 小部件的“正常”绑定事件顺序是(简化):<ButtonPress>, <<ListboxSelect>>, <ButtonRelease>
是否可以“更改”顺序以便在<ButtonRelease> 之后触发<<ListboxSelect>> 事件?
为此,我尝试使用bindtags 和自定义“假”bind_class,但到目前为止还没有得到想要的结果......
这是代码示例:
import tkinter as tk
root = tk.Tk()
l = tk.Listbox(root, name='custlist')
for e in range(55): l.insert(tk.END, 'L_item'+str(e))
l.pack()
l.bind('<ButtonPress>', lambda e: print("L: Click"))
l.bind('<ButtonRelease>', lambda e: print("L: ButtonRelease"))
l.bind_class("post-class-bindings", "<<ListboxSelect>>", lambda e: print("L: post-ListboxSelect"))
l.bindtags((l.winfo_pathname(l.winfo_id()),'Listbox','post-class-bindings', '.', 'all'))
你能告诉我是否有可能以这种或另一种方式获得这样的东西? 谢谢
编辑:
想到它,我意识到我不能那样做,因为我猜
<ButtonPress>+<<ListboxSelect>> 事件在其流程中有些“链接”,而 <ButtonRelease> 是“未绑定”的,因此我应该在 <ButtonRelease> 回调结束时调用/生成 <<ListboxSelect>> 事件以触发它......可能在大多数情况下都可以工作,但是...这不是我想要达到的目的...(实际上,这就像将<<ListboxSelect>> 事件代码“移动”到<ButtonRelease> callbak ...)
所以,最后,问题是是否可以将 ButtonRelease 与 ListboxSelect 一起“链接”(与 ButtonPress 相同)? ...我想这样的事情是不可能的
【问题讨论】:
标签: python python-3.x tkinter tk