【发布时间】:2021-10-04 13:06:58
【问题描述】:
我正在 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,所以我不知道它会有什么不同)?或者我是否遗漏了一些东西,它们是将每个按钮与数据库中的条目链接起来的方法。
这是我的应用图片,如果有帮助的话
【问题讨论】:
-
将这些条目小部件附加到列表中,并将索引作为参数传递给删除函数,然后在函数中将它们从列表中删除,或者更多类似的方法,调用
.destroy()以便其余的索引保持不变,或者使用字典并删除键,提示:使用lambda i=i或类似的东西来保持当前循环的索引和东西 -
@Matiiss 是的,但我将如何通过索引?每个按钮都将具有相同的代码行,我将条目小部件添加到和列表中(我也尝试使用字典),但是当将其传递给它时,所有按钮输出都是相同的(因为就像我说的相同的代码行)。有什么我想念的吗?谢谢。
-
您错过了我告诉您使用
lambda variable=variable:的部分(其中变量可以是您想要的任何名称......)这将允许函数始终使用相同的变量,在这种情况下索引,所以当你调用特定按钮的函数时,它已经“保存”了它的索引,还有两种稍微不同的方法我能想到基本上做同样的事情,但至少弄清楚这一点,如果你不能我会试着写一个答案 -
另外,我刚刚读到您询问了有关课程的问题,嗯,我不知道这是否会更容易(也不是更难),但我会说它会更好,并且会让事情更有条理,如果你愿意,我也可以尝试写一个这样的例子