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

如何捕获Tkinter菜单栏子菜单中邮箱地址按钮的点击事件?

捕获Tkinter菜单中选中的邮箱地址

要实现点击邮箱地址时捕获选中值,只需要给每个邮箱对应的菜单命令绑定带参数的回调函数,通过lambda传递当前邮箱地址即可,修改后的代码如下:

from tkinter import *
from tkinter import messagebox

class MenuBar(Menu):
    def __init__(self, ws):
        Menu.__init__(self, ws)

        recipient= Menu(self, tearoff=0)
        address = Menu(self, tearoff=0)
        for email in ('joe@joe.com', 'sam@sam.com'):
            # 给每个邮箱命令绑定回调,通过lambda传递当前邮箱地址
            address.add_command(label=email, command=lambda e=email: self.on_email_selected(e))
        recipient.add_cascade(label='email', menu=address)
        self.add_cascade(label='Recipient', menu=recipient)

    def on_email_selected(self, email):
        # 这里处理选中邮箱后的逻辑,示例用弹窗显示
        messagebox.showinfo("选中的邮箱", f"你选择了:{email}")
        # 也可以把email保存到变量、写入文件等,根据需求修改

class MenuTest(Tk):
    def __init__(self):
        Tk.__init__(self)
        menubar = MenuBar(self)
        self.config(menu=menubar)

if __name__ == "__main__":
    ws=MenuTest()
    ws.title('email recipient')
    ws.geometry('400x300')
    ws.mainloop()

关键改动说明

  • 新增on_email_selected方法:作为选中邮箱后的处理逻辑入口,参数email就是被点击的邮箱地址,你可以在这里实现任何业务需求(比如保存到全局变量、触发邮件发送流程等)。
  • 绑定command参数:在循环添加邮箱菜单时,用lambda e=email把当前循环的邮箱地址传递给回调函数,这样每个菜单命令都会正确传递对应的邮箱值,避免循环变量引用导致的取值错误。

内容的提问来源于stack exchange,提问作者bob_the_bob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:15:41