我在一个目录中有许多测试文件。我正在尝试编写一个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的按钮时,它将传递B
给该test
方法。
我环顾四周,发现了这个问题如何将参数传递给Tkinter按钮的回调命令?但是答案并没有继续使用相同的变量名和不同的值来配置另一个小部件。(实际上,通过将变量名与窗口小部件名绑定在一起,几乎暗示了该技术在这种情况下不起作用,正如我所发现的那样。)
我是很新的Python,但我很熟悉创建使用Tcl / TK,我认识到这个问题,这种GUI的-的价值tstName
,当我按下按钮被传递,但我想它传递值的变量当我创建它时。我知道如何在Tcl / Tk中修复该问题-我将[list]
在创建时定义一个命令字符串,以捕获变量的值。
如何在Python中做同样的事情?
您需要在定义按钮时绑定tstName的当前值。您执行操作的方式,tstName
无论按下按钮时的意志价值是多少。
要在创建按钮时绑定值,请使用tstName的值作为lambda的关键字参数的默认值,如下所示:
btn = Button(..., command=lambda t=tstName: self.test(t))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句