更多关于将参数传递给 tkinter 按钮命令

nur*_*law 3 python tkinter

我在一个目录中有许多测试文件。我正在尝试编写一个 GUI 以允许我选择并运行其中之一。

所以,我有一个循环扫描目录并创建按钮:

    for fnm in glob.glob ('Run*.py'):
        tstName = fnm[3:-3]      # Discard fixed part of filename
        btn = Button (self, text=tstName,
                      command=lambda: self.test(tstName))
        btn.grid (row=rowNum, column=0, pady=2)
        rowNum += 1
Run Code Online (Sandbox Code Playgroud)

这正确地创建了我的 GUI,按钮标记为 A 和 B,但是当我按下标记为 A 的按钮时,它会传递B给该test方法。

我环顾四周,发现这个问题如何将参数传递给 Tkinter 按钮的回调命令?但答案并没有继续使用具有不同值的相同变量名称来配置另一个小部件。(事实上​​,正如我发现的那样,通过将变量名称与小部件名称联系起来,几乎意味着该技术在这种情况下不起作用。)

我是新的Python,但我很熟悉创建使用Tcl / TK,我认识到这个问题,这种GUI的-的价值tstName,当我按下按钮被传递,但我想它传递值的变量我创建它时有。我知道如何在 Tcl/Tk 中解决这个问题——我会[list]在创建时定义一个命令字符串,它会捕获变量的值。

我如何在 Python 中做同样的事情?

Bry*_*ley 5

您需要在定义按钮时绑定 tstName 的当前值。你这样做的方式,tstName无论你按下按钮时的值是什么。

要在创建按钮时绑定值,请使用 tstName 的值作为 lambda 关键字参数的默认值,如下所示:

btn = Button(..., command=lambda t=tstName: self.test(t))
Run Code Online (Sandbox Code Playgroud)