You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:15:04