python - 带有lambda的python tkinter菜单没有选择正确的选项
问题描述
我在 tkinter 菜单命令上的 lambda 函数有点麻烦,我写了一个示例应用程序来演示/重现我遇到的问题(下)。
在下面的示例应用程序中,当您运行它时,会出现一个名为 test 的菜单,其中包含三个项目,即 Item1、Item2 和 Item3,这一切看起来都很好,但是无论您选择哪个菜单项,都可以使用 click_menu 功能接收加载的最后一个菜单项的参数,这不是我想要的。
谁能帮我解决这个问题?
谢谢,
戴夫。
import tkinter as tk
import time
import threading
class example(tk.Frame):
titleprefix = 'Menu Test Example'
data = {"Item1": "A11111", "Item2": "B22222", "Item3": "C33333"}
def __init__(self, master=None):
self.root = tk.Tk()
self.root.geometry("800" + "x" + "500")
self.root.wm_title(self.titleprefix)
self.root.option_add('*tearOff', False)
root_menu = tk.Menu(self.root)
self.root.config(menu = root_menu)
self.test_menu = tk.Menu(root_menu)
root_menu.add_cascade(label = "test", menu = self.test_menu)
self.update_menu()
self.root.mainloop()
def update_menu(self):
for menui in self.data.keys():
iniid = self.data[menui]
self.test_menu.add_command(label = menui, command=lambda: self.click_menu("{}".format(iniid)))
def click_menu(self, item):
print("item:", item)
ex = example()
解决方案
推荐阅读
- c# - 我的 Visual Studio 2019 WPF 应用程序在应该是 exe 时将 dll 设置为输出
- javascript - ViewModel 类似 AngularJs 中的验证
- bash - 如何与 curl 并行使用?
- jquery-ui - 用单击事件替换 Jquery UI 鼠标悬停事件
- nuget - NuGet 包被标记为预发布
- javascript - 在 VueJs 中以 CSV、Excel、PDF 格式导出表格数据
- php - PHP / Session:登录后将所有数据带入表用户
- facebook - Facebook Firebase 不存储标识符
- bluetooth-lowenergy - esp-idf BLE 扫描
- r - R lubridate 找到连续时间框架和一组间隔之间的非重叠时段