特金特。使用“不同”命令功能创建多个按钮

2024-04-19 22:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,对不起标题,我找不到更好的。

下面的代码是我在Python程序中遇到的一个问题的最小化版本(我是一个新手)。

def onClick(i):
    print "This is Button: " + str(i)
    return

def start():
    b = [0 for x in range(5)]
    win = Tkinter.Tk()
    for i in range(5):
        b[i] = Tkinter.Button(win,height=10,width=100,command=lambda : onClick(i))
        b[i].pack()
    return

它的作用: 无论我按哪个按钮,它都会说“这是按钮:4”。

我想要的: 第一个按钮应该说“这是按钮:0”等等。

这是Python想要的行为吗?如果答案是肯定的,为什么会这样?我怎样才能修好它?

另一方面,这样做很好:

def start():        
    x = [0 for x in range(5)]
    for i in range(5):
        x[i] = lambda:onClick(i)
        x[i]()
    return

Tags: lambda代码in程序标题forreturntkinter
1条回答
网友
1楼 · 发布于 2024-04-19 22:52:43

使用默认参数可避免后期绑定问题(否则在调用lambda函数时绑定i,而不是在创建该函数时绑定):

def start():
    buttons = []
    win = Tkinter.Tk()
    for i in range(5):
        b = Tkinter.Button(win, height=10, width=100, command=lambda i=i: onClick(i))
        b.pack()
        buttons.append(b)

相关问题 更多 >