首页 > 解决方案 > 带有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()

标签: pythontkinterlambdamenu

解决方案


推荐阅读