使用独特的命令参数在 tkinter 中以编程方式创建按钮
当前的任务是使用 for 循环在 tkinter 界面中生成多个按钮。每个按钮应包含一个唯一的命令参数,表示当前迭代计数。但是,现有代码生成具有一致打印值的按钮,这表明命令参数分配存在潜在问题。
问题:消失的迭代值
提供的代码创建标题范围从“游戏 1”到“游戏 3”的按钮。单击任何这些按钮后,打印值始终为 2,对应于最后一次迭代计数。这表明命令参数被视为单个实体,而不是与每个单独的按钮关联。
解决方案:保留迭代值
关键解决这个问题的方法是在为每个按钮定义命令时保留当前的迭代值 (i)。为此,需要修改 lambda 表达式:
command=lambda i=i: self.open_this(i)
此 lambda 表达式将 i 的当前值分配给名为 i 的变量。这可确保在创建时捕获 i 值并将其附加到特定按钮。因此,每个按钮都可以访问其唯一的迭代计数。
了解 Lambda 闭包
通过使用 i=i,闭包存储 i 的当前值在定义 lambda 时,而不是依赖于调用函数时 i 的值。这保留了每个按钮的必要信息。
固定代码
经过上述修改,更正后的代码如下所示:
def createGameURLs(self): self.button = [] for i in range(3): self.button.append(Button(self, text='Game '+str(i+1), command=lambda i=i: self.open_this(i))) self.button[i].grid(column=4, row=i+1, sticky=W) def open_this(self, myNum): print(myNum)
现在,单击任何按钮,都会准确打印相应的迭代计数,解决了最初的问题。
以上是如何将独特的参数传递给 Tkinter 按钮循环中的命令?的详细内容。更多信息请关注PHP中文网其他相关文章!