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

Tkinter Menubutton点击无反应,选项无法显示问题求助

问题解决: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:26:06