改变tkinter内的按钮

时间:2015-12-01 23:25:11

标签: python button tkinter

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)

我有这段代码,但我不知道如何让显示功能正常工作。如何在没有硬编码变量名称的情况下调用按钮并更改文本?

1 个答案:

答案 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"] = " "