使用按钮和更改变量时,我可以使用命令锁定中使用的变量

时间:2014-07-21 12:03:27

标签: python-3.x tkinter

我正在使用Python和Tkinter制作一个Rubik的立方体解算器,我在尝试减小代码大小时遇到​​了问题。

我展示的代码片段是为了了解立方体的情况。它使用带图像的按钮绘制立方体网,但它们没有固定变量,因此当我更改定义的变量时,命令变量也会发生变化。有没有办法绕过它

#Defines Images
White = PhotoImage(file="White.gif")
Yellow = PhotoImage(file="Yellow.gif")
Blue = PhotoImage(file="Blue.gif")
Green = PhotoImage(file="Green.gif")
Red = PhotoImage(file="Red.gif")
Orange = PhotoImage(file="Orange.gif")

#List with Images, positions and values
Colours = [[White, 550, 40, 0, "White"],
           [Yellow, 550, 520, 1, "Yellow"],
           [Blue, 790, 280, 2, "Blue"],
           [Green, 310, 280, 3, "Green"],
           [Red, 550, 280, 4, "Red"],
           [Orange, 70, 280, 5, "Orange"]]

#Testing Function
def swicth(a):
    global Colours
    print(Colours[a][4])

#Creates the Buttons in specific locations
for i in Colours:
    for j in range(3):
        yOffset = (j * 80) + i[2]
        for k in range(3):
            xOffset = (k * 80) + i[1]
            Button(Solver, image = i[0], command=lambda:swicth(i[3])).place(x=xOffset, y=yOffset)

这段代码大部分都有用,但是所有的按钮都有相同的结果5.我有六种颜色的6套for循环可以解决这个问题,但是如果有人能提供帮助的话会很棒

1 个答案:

答案 0 :(得分:0)

将你的lambda改为:

..., command=lambda arg=i[3]:swicth(arg)

这将导致i[3]在创建lambda时绑定到lambda。