Tkinter Menubutton点击无反应,选项无法显示问题求助
你的代码存在两个核心问题导致菜单无法弹出:
1. 错误的控件赋值方式
menubut = ttk.Menubutton(values_frame, text='Strategies').grid(...) 这行代码中,grid()方法返回的是None,所以menubut变量并没有指向Menubutton控件本身,而是变成了None。后续将菜单绑定到None自然无效。
必须分开创建控件和执行布局:
menubut = ttk.Menubutton(values_frame, text='Strategies') menubut.grid(column=1, row=5, padx=5, pady=5)
2. 未将菜单与Menubutton绑定
创建完菜单file后,需要明确告诉Menubutton它要关联的菜单是哪个,通过设置menu属性实现:
menubut['menu'] = file
修正后的完整代码
import tkinter as tk from tkinter import ttk from ttkthemes import ThemedStyle Label_font = 'Times New Roman' font_size = 15 tkinter_theme = 'equilux' root = tk.Tk() root.title('Welcome to Options') root.geometry('350x600') root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) root.configure(background='grey14') button_frame = ttk.Frame(root, padding="5 5 10 10") button_frame.grid(column=0, row=1) values_frame = ttk.Frame(root, padding="5 5 10 10") values_frame.grid(column=0, row=0) options_frame = ttk.Frame(root, padding="5 5 10 10") options_frame.grid(column=1, row=0) style = ThemedStyle(root) style.set_theme('equilux') ttk.Label(values_frame, text="Pixel size:", font=( Label_font, font_size)).grid(column=0, row=0, padx=5, pady=5) ttk.Label(values_frame, text="Min object size:", font=( Label_font, font_size)).grid(column=0, row=1, padx=5, pady=5) ttk.Label(values_frame, text="# of Files per condition:\n (Excel Sheet Size)", font=( Label_font, font_size)).grid(column=0, row=2, padx=5, pady=5) ttk.Label(values_frame, text="Object tracking memory:", font=( Label_font, font_size)).grid(column=0, row=3, padx=5, pady=5) ttk.Label(values_frame, text="Search radius:", font=( Label_font, font_size)).grid(column=0, row=4, padx=5, pady=5) ttk.Label(values_frame, text="Path linking strategy:", font=( Label_font, font_size)).grid(column=0, row=5, padx=5, pady=5) pixel_size = ttk.Entry(values_frame, font=( Label_font, font_size)).grid(column=1, row=0, padx=5, pady=5) min_size_trk = ttk.Entry(values_frame, font=( Label_font, font_size)).grid(column=1, row=1, padx=5, pady=5) sheet_size = ttk.Entry(values_frame, font=( Label_font, font_size)).grid(column=1, row=2, padx=5, pady=5) trk_memory = ttk.Entry(values_frame, font=( Label_font, font_size)).grid(column=1, row=3, padx=5, pady=5) search_range = ttk.Entry(values_frame, font=( Label_font, font_size)).grid(column=1, row=4, padx=5, pady=5) # 修正:分开创建和布局Menubutton menubut = ttk.Menubutton(values_frame, text='Strategies') menubut.grid(column=1, row=5, padx=5, pady=5) file = tk.Menu(menubut) # 修正:绑定菜单到Menubutton menubut['menu'] = file file.add_radiobutton(label='Numba') file.add_radiobutton(label='Recursive') file.add_radiobutton(label='Nonrecursive') file.add_radiobutton(label='Drop') file.add_radiobutton(label='Auto') root.mainloop()
额外提示
你其他的Entry控件也存在同样的赋值问题:pixel_size = ttk.Entry(...).grid(...) 会导致pixel_size为None,如果你后续需要操作这些Entry(比如获取输入值),同样需要分开创建和布局:
pixel_size = ttk.Entry(values_frame, font=(Label_font, font_size)) pixel_size.grid(column=1, row=0, padx=5, pady=5)
内容的提问来源于stack exchange,提问作者Ryan Bowser
相关产品推荐
相关产品推荐

