Python ttk按钮。将args传递给OnClick

问题描述 投票:2回答:2

我对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还是相当陌生,在这个论坛上发帖是全新的(我已经使用了多年,但是通常通过搜索过去的问题来找到答案的运气更大。今天我很沮丧……) >

python tkinter lambda ttk
2个回答
0
投票

使用事件处理程序捕获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 ...

0
投票

您需要使用lambda中参数的默认值:

© www.soinside.com 2019 - 2024. All rights reserved.