我正在使用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循环可以解决这个问题,但是如果有人能提供帮助的话会很棒
答案 0 :(得分:0)
将你的lambda改为:
..., command=lambda arg=i[3]:swicth(arg)
这将导致i[3]
在创建lambda时绑定到lambda。