繁体   English   中英

有关将参数传递给tkinter button命令的更多信息

[英]More on passing arguments to tkinter button command

我在一个目录中有许多测试文件。 我正在尝试编写一个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”和“A”,但是当我按下标有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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM