如何知道我在列表的哪个输入框中按下了回车键?
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。
我正在尝试在 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。