如何获取Tkinter中Menubutton控件选中菜单项的标签名称
你现有代码无法拿到预期值的核心原因有两个:
button.cget("text")读取的是Menubutton控件自身的显示文本,默认是初始化时传入的"Test",和菜单内的选项没有自动关联- 你在
Seite_0函数里写了fenster.destroy(),函数执行时会直接销毁主窗口,根本没有给用户点选菜单、点击按钮的交互机会
Tkinter的Menu控件没有内置属性直接存储最后选中的菜单项,你可以通过变量绑定选中回调的方式实现需求,具体逻辑如下:
- 初始化一个
StringVar类型的变量,专门用来存储最后选中的菜单项标签 - 给每个通过
add_command添加的菜单项绑定选中回调,选中时把当前菜单项的标签写入上述变量,可按需同步更新Menubutton的显示文本,让交互更直观 - 需要获取选中值的时候,直接读取该变量的内容即可
修正后可直接运行的代码如下:
import tkinter as tk fenster = tk.Tk() fenster.geometry("500x150") def Seite_0(): # 存储选中菜单项的变量,初始值为空 selected_item = tk.StringVar(value="") button = tk.Menubutton(fenster, text="Test", relief="raised") Menü = tk.Menu(button, tearoff=0) # 菜单项选中触发的逻辑 def select_action(label): selected_item.set(label) # 下一行是可选配置:把Menubutton显示的文本改成选中项,不需要可以直接删掉 button.config(text=label) # 添加菜单项,绑定回调传入自身标签 Menü.add_command(label="1", command=lambda: select_action("1")) # 多个选项按相同格式添加即可,例如: # Menü.add_command(label="2", command=lambda: select_action("2")) # Menü.add_command(label="3", command=lambda: select_action("3")) button["menu"] = Menü # 确认按钮点击时打印选中值 bestaetigen = tk.Button( fenster, text="Weiter", command=lambda: print(selected_item.get()) ) button.pack(pady=20) bestaetigen.pack() Seite_0() fenster.mainloop()
运行上述代码,展开Menubutton选中标签为1的选项后,点击Weiter按钮,控制台就会输出预期结果1。
内容的提问来源于stack exchange,提问作者The GoodGameCrafter
相关产品推荐
相关产品推荐

