首页 > 解决方案 > 如何使用删除按钮删除特定事件?

问题描述

我的代码中有一个迭代,显示每一行:ID/名称/按钮删除。你可以看到下面的图片。我希望当我单击其中一个删除按钮时,同一行上的数据将被删除。我尽力了,你可以看到我的代码。我该怎么做?十分感谢。

在此处输入图像描述

from tkinter import *

import mysql.connector


def main():

    root = Tk()

    conn = mysql.connector.connect(user='root', password='', host='localhost', 
                                   database='showmanager')
    my_cursor = conn.cursor()

    var_i = 3

    def del_customer():
        my_cursor.execute("DELETE FROM `spectator` "
                          "WHERE `spectator`.`id_customer` = "+user[0]+"")

    my_cursor.execute("SELECT * FROM spectator")
    users = my_cursor.fetchall()

    for user in users:
        label = Label(root, text=user, font=9)
        label.grid(row=int(var_i), column=1)
        Button(root, text="Delete spectator", font=9, height=1, 
               command=del_customer).grid(row=int(var_i), column=4)
        var_i = var_i + 1
    root.mainloop()


if __name__ == '__main__':
    main()

标签: pythontkinter

解决方案


您可以将客户 ID 和相应的小部件(标签和按钮)传递给,del_customer()以便您可以根据客户 ID 和函数内部的相应标签和按钮删除数据库中的记录:

def del_customer(cust_id, widgets):
    my_cursor.execute("DELETE FROM spectator WHERE id_customer = %s", [cust_id])
    conn.commit()  # make the change effective
    # remove the corresponding label and button
    for w in widgets:
        w.destroy()

...

for user in users:
    label = Label(root, text=user)
    label.grid(row=var_i, column=1)
    btn = Button(root, text="Delete spectator")
    btn.grid(row=var_i, column=4)
    var_i += 1
    # pass the customer ID, label and button to del_customer()
    btn['command'] = lambda cust_id=user[0], widgets=(label, btn): del_customer(cust_id, widgets)

推荐阅读