如何捕获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
相关产品推荐
相关产品推荐

