我有以下代码片段,其中我创建了一系列按钮来对创建的数字类运行增加或减少方法。
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是一个StringVars列表,对应于_adjustedPrice中数字对象的值
谢谢!
答案 0 :(得分:0)
您需要将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