Python 有关向tkinter按钮命令传递参数的详细信息

Python 有关向tkinter按钮命令传递参数的详细信息,python,tkinter,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.

我在一个目录中有许多测试文件。我正在尝试编写一个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
这就正确地创建了我的GUI,带有标记为A和B的按钮,但当我按下标记为A的按钮时,它将传递到
test
方法

我环顾四周,发现了这个问题,但答案并不是使用相同的变量名和不同的值来配置另一个小部件。(事实上,通过将变量名与小部件名绑定,这几乎意味着这种技术在这种情况下不起作用,正如我发现的那样。)

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


在Python中如何执行相同的操作?

您需要在定义按钮时绑定tstName的当前值。按照您的操作方式,
tstName
的值将在您按下按钮时显示为任何值

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

btn = Button(..., command=lambda t=tstName: self.test(t))

或者
functools.partial(self.test,tstName)
谢谢Bryan-这就成功了。如果有人能提供有关
lambda
的文档链接,我将不胜感激。