Python 在tkinter中更改按钮
我有这个代码,但我不知道如何让显示功能工作。在没有硬编码变量名的情况下,如何调用按钮并更改文本 您不能将命令分配给具有被调用函数(Python 在tkinter中更改按钮,python,button,tkinter,Python,Button,Tkinter,我有这个代码,但我不知道如何让显示功能工作。在没有硬编码变量名的情况下,如何调用按钮并更改文本 您不能将命令分配给具有被调用函数(display(x,y))的按钮,因为这会将此函数返回的内容(None)分配给按钮的命令。您需要指定可调用(显示)来代替 要执行此操作并传递参数,您需要使用lambda: win=Tk() level1=matrixmaker(4) def display(x,y): if z["text"] == " ": # switch to Goodbye
display(x,y)
)的按钮,因为这会将此函数返回的内容(None
)分配给按钮的命令。您需要指定可调用(显示
)来代替
要执行此操作并传递参数,您需要使用lambda:
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)
此外,您还需要更改display()
函数以接受另一个参数z
,以便更改正确的按钮(并更正缩进):
您不能将命令分配给具有被调用函数(
display(x,y)
)的按钮,因为这将此函数返回的内容(None
)分配给按钮的命令。您需要指定可调用(显示
)来代替
要执行此操作并传递参数,您需要使用lambda:
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)
此外,您还需要更改display()
函数以接受另一个参数z
,以便更改正确的按钮(并更正缩进):
在Tkinter中,
命令
参数是对函数的引用,而不是函数本身。必须将参数设置为不带参数的command=display
。请参见此处:另外,您正在调用一个只有两个参数的三参数函数(无论如何都不能添加)。使用command=lambda a=x,b=y:display(a,b)
我添加了lambda,但是现在每当我在网格上单击任何东西时,它只会更改右下角的按钮,因为您更改了z
——但是z
是在循环中为创建的最后一个按钮。在Tkinter中,命令
参数是对函数的引用,而不是函数本身。必须将参数设置为不带参数的command=display
。请参见此处:另外,您正在调用一个只有两个参数的三参数函数(无论如何都不能添加)。使用command=lambda a=x,b=y:display(a,b)
我添加了lambda,但现在每当我在网格上单击任何内容时,它只会更改右下角的按钮,因为您更改了z
-但是z
是在循环中为创建的最后一个按钮。您应该添加-OP需要使用def display(x,y,z)
代替def display(x,y)
@furas感谢您指出这一点(在OP编辑问题之前,它被定义为def display(x,y,z)
),您应该添加-OP需要使用def display(x,y,z)
代替def display(x,y)
@furas感谢您指出这一点(在OP编辑问题之前,它被定义为def display(x,y,z)
)
def display(x,y,z):
if z["text"] == " ":
# switch to Goodbye
z["text"] = level1[x][y]
else:
# reset to Hi
z["text"] = " "