Tkinter菜单控件菜单项绑定函数右键呼出时自动执行如何解决
问题原因
你在给add_command的command参数传值时,直接写了copy()/copy_all()/paste(),带括号的写法会立即执行对应函数,把函数返回值(这里三个函数都没有return,返回的是None)绑定给菜单项,所以每次生成上下文菜单的时候三个函数都会直接运行一次。
修复方案
把command参数的值改为不带括号的函数名,也就是直接传递函数引用,而不是提前执行函数,只有当你点击对应菜单项的时候,Tkinter才会调用这个引用指向的函数。
修正后的完整代码如下:
from tkinter import * def copy(): print("Copied") def copy_all(): print("Copied all") def paste(): print("Paste") def showContext(event): x, y = event.x_root, event.y_root ContextMenu = Menu(win, tearoff=0) # 去掉command对应函数后的括号,仅传递函数引用 ContextMenu.add_command(label="Copy ", command=copy) ContextMenu.add_command(label="Copy All ", command=copy_all) ContextMenu.add_separator() ContextMenu.add_command(label="Paste", command=paste) ContextMenu.tk_popup(x,y) win = Tk() win.geometry("300x300") win.bind("<Button-3>", showContext) mainloop()
内容的提问来源于stack exchange,提问作者Praveen kumar
相关产品推荐
相关产品推荐

