我在单个目录中有许多测试文件。我正在尝试编写一个GUI来允许我选择并运行其中的一个。有关将参数传递给tkinter按钮命令的更多信息
所以,我有一个循环,扫描目录,并创建按钮:
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它传递B
至test
方法。
我环顾四周,发现这个问题How can I pass arguments to Tkinter button's callback command?,但答案并没有继续使用相同的变量名,用不同的值来配置另一个小部件。 (事实上,通过捆绑变量名部件名几乎意味着该技术不会在这种情况下工作,因为我发现。)
我到Python非常新的,但我对使用Tcl/TK创建这种图形用户界面非常熟悉,我认识到这个问题 - 当我按下按钮时,会传递tstName
的值,但我希望它能够传递变量在创建时的值。我知道如何在Tcl/Tk中解决这个问题 - 我会在创建时使用[list]
来定义一个命令字符串,它将捕获变量的值。
如何在Python中执行相同的操作?
或'functools.partial(个体经营.test,tstName)' –
谢谢布赖恩 - 这是诀窍。如果有人会提供一个链接到'lambda'的文档,我会很感激。 – nurdglaw