我正在用Tkinter做一个DBMS,我想有一个删除相应条目(右边的条目)的按钮。计算机如何知道哪个按钮正在发送命令或链接到哪个条目(或者如何链接它们)
看一下下面的代码
def edit_db():
for i in root.winfo_children():
i.grid_remove()
back_btn = Button(root, text='<--', command=home)
back_btn.place(height=30, width=30, x=4, y=4)
row_count = 1
for i in cur.execute("SELECT * FROM students").fetchall():
save_btn = Button(root, text='Save', font=("Calbri", 9))
if row_count == 1: save_btn.grid(row=row_count, column=1, pady=(45, 3), padx=(5, 10))
else: save_btn.grid(row=row_count, column=1, pady=3, padx=(5, 10))
del_btn = Button(root, text="X", font=("Calbri", 9), command=del_entry)
if row_count == 1: del_btn.grid(row=row_count, column=0, pady=(45, 3), padx=5)
else: del_btn.grid(row=row_count, column=0, pady=3, padx=(5))正如您所看到的,它们是多个del_btn (和save_btn),它们的变量名将不再对应,但我希望这样做
del_btn = Button(root, text="X", font=("Calbri", 9), command=del_entry(**self/this/me**))有什么我能做的吗?我必须在class中完成所有这些吗(我不是一个很好的OOP,所以我不知道这会有什么不同)?或者我遗漏了什么,他们的方法是将每个按钮与数据库中的条目链接起来。
这是我的应用程序的图片,如果它有帮助的话

发布于 2021-07-29 14:21:06
以下是解决方案(包括3个选项):
from tkinter import Tk, Button, Label
label_list = []
def destroy_widget(index):
label_list[index].destroy()
root = Tk()
for i in range(10):
lbl = Label(root, text=f'Label {i}')
lbl.grid(row=i, column=0, sticky='nsew')
label_list.append(lbl)
Button(root, text=f'Destroy {i}',
command=lambda index=i: destroy_widget(index)).grid(row=i, column=1, sticky='nsew')
# option using partial (place import at the top)
# from functools import partial
# Button(root, text=f'Destroy {i}',
# command=lambda: partial(destroy_widget, i).grid(row=i, column=1, sticky='nsew')
# option defining function here (if so then the one at the top isn't needed)
# def destroy_widget(index=i):
# label_list[index].destroy()
# Button(root, text=f'Destroy {i}',
# command=destroy_widget).grid(row=i, column=1, sticky='nsew')
root.mainloop()正如我所说的,将小部件放在一个列表中,然后保存索引(最好使用字典并保存键,这样它们就可以与它们的实例一起删除,否则您不能从列表中删除它们,因为这会更改其他索引,这会使事情变得一团糟)到您传递给按钮的函数,以便它们“记住”它,我提供了三种不同的(稍微)方法,一种是使用匿名函数,一种是使用partial函数,一种是使用普通函数
https://stackoverflow.com/questions/68566355
复制相似问题