如何在Tkinter中将弹出菜单绑定到标签

时间:2018-12-28 03:45:44

标签: python python-3.x tkinter

我想限制弹出菜单可以触发的区域

我当前的代码允许在用户右键单击时在tkinter窗口中的任何地方触发弹出菜单

from tkinter import *

root = Tk()

w = Label(root, text="Right-click to display menu", width=40, height=20)
w.pack()


popup = Menu(root, tearoff=0)
popup.add_command(label="Next") # , command=next) etc...
popup.add_command(label="Previous")
popup.add_separator()
popup.add_command(label="Home")

def do_popup(event):

    try:
        popup.tk_popup(event.x_root, event.y_root, 0)
    finally:
        popup.grab_release()

w.bind("<Button-3>", do_popup)

b = Button(root, text="Quit", command=root.destroy)
b.pack()

mainloop()

我希望仅在用户右键单击标签“右键单击以显示菜单”时触发弹出菜单

1 个答案:

答案 0 :(得分:2)

您的代码完全按设计工作。您已经创建了一个非常大的标签窗口小部件(宽40个字符,高20个字符或大约350x325像素,具体取决于您的系统字体和分辨率设置)。因此,当您认为自己在标签之外单击时,并不是因为它占据了整个窗口。

要理解我的意思,请为您的标签添加独特的背景色。例如:

w = Label(root, text="Right-click to display menu", width=40, height=20, background="pink")

以上结果将导致一个窗口,如下图所示。您单击的任何地方,粉红色都是标签的一部分,因此将显示菜单。

enter image description here