我知道menu.tk_popup()可以用于在特定坐标处打开上下文菜单,但不知道如何在其中打开子菜单,如果有意义的话。这是我编写的代码:
import tkinter as tk
root = tk.Tk()
root.geometry("500x400")
def contextMenu(e, openCascade=False):
my_menu2 = tk.Menu(root, tearoff=False)
my_menu2.add_command(label="command2")
my_menu = tk.Menu(root, tearoff=False)
my_menu.add_cascade(label="cascade1", menu=my_menu2)
my_menu.add_command(label="command1")
my_menu.tk_popup(e.x_root, e.y_root)
if openCascade:
my_menu2.tk_popup(e.x_root, e.y_root) #doesn't work
root.bind("<Button-3>", contextMenu)
root.bind("<Button-2>", lambda e: contextMenu(e=e, openCascade=True))
root.mainloop()
该代码基本上创建了一个窗口,右键单击它(< Button-3> bind),将显示第一个菜单(my_menu),其中包括一个级联菜单(cascade1)。手动运行级联菜单即可显示子菜单(my_menu2),如下图所示。 问题不在于右键单击,而是中间点击(< Button-2> bind)无法按照我想要的方式工作。当我中间点击时,我尝试让它显示这两个菜单(my_menu、my_menu2),但我的尝试只显示了两个菜单,但是第一个菜单重叠在前面,所以其他菜单无法显示。
所以问题是,如何使中间点击打开第一个菜单然后自动运行级联菜单,就像点击一样?如果您不理解我解释的,请不要犹豫,随时问我。