Python TKinter使用循环索引传递按钮命令的参数

Python TKinter使用循环索引传递按钮命令的参数,python,for-loop,button,indexing,tkinter,Python,For Loop,Button,Indexing,Tkinter,我有下面的一段代码,我在其中创建了一系列按钮,以便在创建的number类上运行递增或递减方法 for idx in range(len(self._priceNums)): Button(window, text='^', command=lambda: self.incNum(idx)).grid(row=0, column=numInColumn) Label(window, textvariable=self._priceNums[idx]).gri

我有下面的一段代码,我在其中创建了一系列按钮,以便在创建的number类上运行递增或递减方法

    for idx in range(len(self._priceNums)):
        Button(window, text='^', command=lambda: self.incNum(idx)).grid(row=0, column=numInColumn)
        Label(window, textvariable=self._priceNums[idx]).grid(row=1, column=numInColumn)
        Button(window, text='v', command=lambda: self.decNum(idx)).grid(row=2, column=numInColumn)
        numInColumn += 1
该功能在列表中的选定对象上按预期工作,但我的问题是让按钮在正确的对象上操作。

lamba: self.incNum(idx)
似乎只有在按下按钮时才读取idx。因此,每个按钮仅在列表中的最后一个对象上运行该方法。有没有办法以这种方式创建一系列按钮,每个按钮对应于此列表中相应的数字对象。这里是供参考的方法

def incNum(self, idx):
    self._priceNums[idx].set(self.game._adjustedPrice[idx].incNum())
请注意,这可能有帮助,也可能没有帮助:

_priceNums是与_adjustedPrice中的number对象的值相对应的StringVar列表


谢谢大家!

您需要将idx变量传递给lambda函数

for idx in range(len(self._priceNums)):
    Button(window, text='^', command=lambda idx=idx: self.incNum(idx)).grid(row=0, column=numInColumn)
    Label(window, textvariable=self._priceNums[lambda idx=idx: idx]).grid(row=1, column=numInColumn)
    Button(window, text='v', command=lambda idx=idx: self.decNum(idx)).grid(row=2, column=numInColumn)
    numInColumn += 1