python - tkinter 列表框项目绑定(bind)

标签 python listbox tkinter bind

我试图在右键单击列表框小部件中的项目时显示上下文菜单。 问题是,如果绑定(bind)到列表框,整个列表框将处于事件状态以发送事件,并且似乎不可能仅绑定(bind)到列表项。我无法使用<<ListboxSelect>>因为它会在左键单击时触发。所以我尝试使用方法 curselection()但我陷入了不需要的结果(不必选择右键单击的项目)。我想我需要模拟<<ListboxSelect>>使用generate_event()nearest() 。有人可以告诉我如何做到这一点,或者我在哪里可以找到 tkinter 包内的默认绑定(bind)?

最佳答案

您将需要使用nearest(event.y)。绑定(bind)调用回调时右键弹出菜单。

import Tkinter

def context_menu(event, menu):
    widget = event.widget
    index = widget.nearest(event.y)
    _, yoffset, _, height = widget.bbox(index)
    if event.y > height + yoffset + 5: # XXX 5 is a niceness factor :)
        # Outside of widget.
        return
    item = widget.get(index)
    print "Do something with", index, item
    menu.post(event.x_root, event.y_root)

root = Tkinter.Tk()
aqua = root.tk.call('tk', 'windowingsystem') == 'aqua'

menu = Tkinter.Menu()
menu.add_command(label=u'hi')

listbox = Tkinter.Listbox()
listbox.insert(0, *range(1, 10, 2))
listbox.bind('<2>' if aqua else '<3>', lambda e: context_menu(e, menu))
listbox.pack()
root.mainloop()

关于python - tkinter 列表框项目绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14863353/

相关文章:

python - 如何在 tkinter 中找出 Canvas 文本对象的大小?

互联网连接中断的 Python 的 urllib.request.urlopen

python - 如何检测计算机是否使用 Python 连接到互联网?

wpf - 无法在 WPF 中将 ListBoxItem Adorner 拖到 ListBox 之外 -ScrollViewerProblem

forms - 如何在 Excel VBA 中声明和设置 ListBox 变量?

ios - 如何动态滚动到列表框的顶部

Python 在网页上自动打字

python - Eclipse + Pydev + twitter 库问题

python - 有没有办法让 tkinter 在打开时立即执行命令?

python - Tkinter 在循环处理时卡住,我该如何防止它?