Python 在返回错误值的循环中创建的按钮

Python 在返回错误值的循环中创建的按钮,python,tkinter,Python,Tkinter,我想创建一个带有1到9个按钮的简单计算器。我想在两个循环中这样做,以便能够将它们放置在一个3x3的正方形中。但是所有的按钮都返回相同的值9,我不知道为什么。有人能帮我吗? 有一个代码: from tkinter import * root = Tk() e = Entry() e.grid(row=0, column=0, columnspan=3) def button_click(num): e.insert(0, num) for i in range(1, 4):

我想创建一个带有1到9个按钮的简单计算器。我想在两个循环中这样做,以便能够将它们放置在一个3x3的正方形中。但是所有的按钮都返回相同的值9,我不知道为什么。有人能帮我吗? 有一个代码:

from tkinter import *

root = Tk()

e = Entry()
e.grid(row=0, column=0, columnspan=3)


def button_click(num):
    e.insert(0, num)


for i in range(1, 4):
    for j in range(0, 3):
        k = int(((i - 1) * 3) + (j + 1))
        button = Button(root, text=k, padx=25, pady=25, command=lambda: button_click(k))
        button.grid(row=i, column=j)

这一行几乎是正确的:

button = Button(root, text=k, padx=25, pady=25, command=lambda: button_click(k))
尝试:


除了@Roei Duvdevani回答:您还可以使用functools.partial:

from functools import partial
from tkinter import *


root = Tk()

e = Entry()
e.grid(row=0, column=0, columnspan=3)


def button_click(num):
    e.insert(0, num)


for i in range(1, 4):
    for j in range(0, 3):
        k = int(((i - 1) * 3) + (j + 1))
        button = Button(root, text=k, padx=25, pady=25, command=partial(button_click, k))
        button.grid(row=i, column=j)
以下是有关functools.partial的详细信息:

下面是关于您的问题的更多信息:

from functools import partial
from tkinter import *


root = Tk()

e = Entry()
e.grid(row=0, column=0, columnspan=3)


def button_click(num):
    e.insert(0, num)


for i in range(1, 4):
    for j in range(0, 3):
        k = int(((i - 1) * 3) + (j + 1))
        button = Button(root, text=k, padx=25, pady=25, command=partial(button_click, k))
        button.grid(row=i, column=j)