我对Python还是相当陌生,并且在这个论坛上发帖是全新的(我已经使用了多年,但是通常可以通过搜索过去的问题来找到答案。但是今天我很沮丧)。 >
rows = 8 columns = 8 def onClick(args): print("args: ", args) myButtons = [] myButtons = [ ttk.Button(mainframe, text=str(i) + str(j), command=lambda:onClick([int(i),int(j)])) for i in range(columns) for j in range(rows) ] for i in range(columns) : for j in range(rows): myButtons[i*rows+j].grid(column=i, row=j)
((我还没有包括所有的网格创建代码,但是工作正常,按钮正在显示。)
我正在尝试为网格中的按钮调用click事件。我试图用传递给onClick事件的不同args创建按钮,以便知道单击了哪个按钮。我确定这是在单独创建按钮时起作用的,而不是在使用列表理解功能创建按钮时起作用。现在,无论我单击哪个按钮,我都会得到:
args: [7,7]
有人可以指出我要去哪里了吗?
谢谢!
我对Python还是相当陌生,在这个论坛上发帖是全新的(我已经使用了多年,但是通常通过搜索过去的问题来找到答案的运气更大。今天我很沮丧……) >
使用事件处理程序捕获i和j的一些更改:
def on_click(args):
print("args: ", args)
def click_handler(args):
return lambda: on_click(args)
myButtons = [ttk.Button(mainframe, text=str(i) + str(j), command=lambda: click_handler([int(i),int(j)])) for i in range(8) for j in range(8)]
# for ...
您需要使用lambda
中参数的默认值: