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

如何从Tkinter菜单中正确获取选中的文件夹编号?

解决Tkinter Menu获取选中文件夹编号的问题

问题分析

你的代码存在两个关键问题,导致无法正确获取选中的文件夹编号:

  1. callback函数里硬编码遍历range(2),只会打印菜单的前两个条目,和你实际选中的选项完全无关;
  2. 循环创建菜单命令时,lambda没有捕获当前迭代的folder值,也没把选中的文件夹编号传递给回调函数。

修正后的代码

from tkinter import *
import tkinter as tk
from tkinter import ttk

root = Tk()
root.geometry("300x150")

frame = Frame(root)
frame.pack()

menu_frame = Menu(root)
file_menu = Menu(menu_frame, tearoff=0)

folders = ['25', '70', '200']

sub_menu = Menu(menu_frame, tearoff=0)
# 给lambda绑定当前的folder变量,确保每个菜单命令传递对应编号
for folder in folders:
     sub_menu.add_command(label=folder, command=lambda f=folder: callback(f))

file_menu.add_cascade(label='Open folder... ', menu=sub_menu)
menu_frame.add_cascade(label='File', menu=file_menu)
file_menu.add_separator()
file_menu.add_command(label='Exit', command=root.destroy)

# 直接接收选中的文件夹编号,无需遍历菜单
def callback(selected_folder):
    print(f"选中的文件夹编号:{selected_folder}")
    # 这里可以添加你的数据处理逻辑,比如:
    # process_selected_folder(selected_folder)

# 配置窗口菜单,原代码遗漏了这一步,否则菜单不会显示
root.config(menu=menu_frame)
root.mainloop()

关键修改说明

  • lambda绑定变量:用lambda f=folder: callback(f)把当前迭代的folder值固定到lambda参数里,避免所有菜单命令都指向同一个变量;
  • 简化回调逻辑:直接让callback接收选中的编号,不用再去遍历菜单条目,逻辑更直接;
  • 补充菜单配置:加上root.config(menu=menu_frame),否则菜单不会显示在窗口上,原代码漏掉了这个关键步骤。

修改后点击对应文件夹选项,就能正确输出选中的编号,直接用于后续的数据处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:15:39