如何知道我在列表的哪个输入框中按下了回车键?

How to know in which entry box on a list did I press enter?

我正在尝试在 Tkinter 中使用 Entry 小部件制作一个 table,所以我用它们制作了一个列表。问题是我需要知道用户在哪个框中按回车执行某些操作,例如如果有人擦除一行第一个单元格的内容并按回车,我想擦除所有其他单元格的内容在该行中,或者如果有人在该行的第一个单元格中写入产品代码,则产品描述应该出现在前面的单元格中。

我已经尝试使用此处建议的方法:Tkinter binding a function with arguments to a widget by unutbu,但它似乎不适用于我的条目小部件列表。

这是我试过的方法:

from tkinter import *

root = Tk()
root.configure(background='gray')

item_list_fr = Frame(root, bg='gray', width=450, height=108, padx=3, pady=3)
item_list_fr.grid(row=2, column=0, rowspan=2)

info_tupple=[]

def show(eff=None, row_2=0, column_2=0):
    print(str(row_2), str(column_2))

for row in range(15):
    info_list=[None]*5
    for column in range(5):
        info_list[column]=Entry(item_list_fr)
        info_list[column].bind('<Return>', lambda eff: show(eff, row_2=row, column_2=column))
        info_list[column].grid(row=row+1, column=column)
    info_tupple.append(info_list)

root.mainloop()

如何重写我的代码以使其工作?

您可以这样使用 functools.partial

from tkinter import *
import functools

root = Tk()
root.configure(background='gray')

item_list_fr = Frame(root, bg='gray', width=450, height=108, padx=3, pady=3)
item_list_fr.grid(row=2, column=0, rowspan=2)

info_tupple=[]

def show(eff=None, row_2=0, column_2=0, event=None):
    print(str(row_2), str(column_2))

for row in range(15):
    info_list=[None]*5
    for column in range(5):
        info_list[column]=Entry(item_list_fr)
        command = functools.partial(show, row_2=row, column_2=column)
        info_list[column].bind('<Return>', command)
        info_list[column].grid(row=row+1, column=column)
    info_tupple.append(info_list)

root.mainloop()

更多答案请看here