win=Tk()
level1=matrixmaker(4)
def display(x,y):
if z["text"] == " ":
# switch to Goodbye
z["text"] = level1[x][y]
else:
# reset to Hi
z["text"] = " "
for x in range(0,4):
for y in range(0,4):
z=Button(win,text=" ", command=display(x,y))
z.grid(row=x,column=y)
我有这段代码,但我不知道如何让显示功能正常工作。如何在没有硬编码变量名称的情况下调用按钮并更改文本?
答案 0 :(得分:4)
您不能将命令分配给具有被调用函数(display(x, y)
)的按钮,因为这会将此函数返回(None
)指定给按钮的命令。您需要指定可调用的(display
)。
要执行此操作并传递参数,您需要使用lambda:
z = Button(win, text='')
z['command'] = lambda x=x, y=y, z=z: display(x, y, z)
z.grid(row=x, column=y)
此外,您需要更改display()
函数以接受另一个参数z
,以便更改正确的按钮(并更正缩进):
def display(x,y,z):
if z["text"] == " ":
# switch to Goodbye
z["text"] = level1[x][y]
else:
# reset to Hi
z["text"] = " "