我正在尝试使用Python和Tkinter制作一个GUI应用程序来与philipshueapi一起工作。目前,我有一个python对象的字典,其中的一个正在循环,为每个对象创建一个按钮,例如按钮文本有item或light名称。你知道吗
当我使用command语句时,问题来了。每个按钮都有命令功能,其中包含我希望在单击按钮时调用的功能。你知道吗
按钮做得很好,里面有正确的文本值,但是当我单击按钮时,问题出现了,并且调用了关于对象的函数(在本例中称为itemClick),它传递了应该在最后一个按钮上或循环末尾的对象。你知道吗
我试过在按钮上使用“bind”函数,但在本例中,按钮被点击的次数与循环经过的次数相同。你知道吗
lightsButtonDict = {}
for item in lightlist:
print(lightlist[item].getName())
lightsButtonDict[lightlist[item].getName()] = tk.Button(lightsFrame, text=lightlist[item].getName(), command=lambda: itemClick(lightsFrame, 'light', lightlist[item]))
lightsButtonDict[lightlist[item].getName()].pack()
我声明command = lambda: itemClick(lightsFrame, 'light', lightslist[item])
单击按钮后,最后一个lightlist[item]将被传递到函数中,而不是循环中的那个,即如果有10个按钮,并且您单击第3个按钮,第10个对象将被传递到itemClick中(抱歉,如果听起来有点混乱,希望可以理解)
我想传入与当前循环相关的对象,因此如果单击第3个按钮,则传入第3个对象,以此类推。你知道吗
蒂亚。你知道吗
lambda
将在迭代中存储该项,如果您将其分配给调用中的变量:相关问题 更多 >
编程相关推荐