尝试定义一个delete函数,在该函数中,用户输入一个名称并单击按钮,行将被删除

2024-06-16 12:55:06 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试定义一个delete函数,其中用户在python中输入一个名称并单击delete按钮和包含数据delete的行,这是在tkinter和sqlite的帮助下完成的

这是我的删除功能:

def deleteMovie(name):
    conn = sqlite3.connect('moviedata.db')
    sql = "Delete from movies WHERE name=?"
    conn.execute(sql,(name,))
    messagebox.showinfo("information","MOVIE DELETED")
    conn.commit()
    conn.close()
#this is my entry

代码:

window = tk.Tk()
window.title("SP Movie Admin Form")
window.geometry("400x250")
window.resizable(0, 0)

lName = ttk.Label(window,text="Name",padding=2)
lName.grid(row=1,column=1,columnspan=1)
nameent = StringVar()
nameent = ttk.Entry(window,textvariable=nameent)
nameent.grid(row=1,column=2,columnspan=3)

这是我的按钮:

buttondelete = ttk.Button(window,text="Delete",command=deleteMovie)
buttondelete.grid(row=7,column=2)

window.mainloop()

这就是错误

Traceback (most recent call last):
  File "C:\Users\gayat\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
TypeError: deleteMovie() missing 1 required positional argument: 'name'

Tags: namesqltkintercolumnwindowconndelete按钮
2条回答
TypeError: deleteMovie() missing 1 required positional argument: 'name'

当然,你想删除的电影名是什么

我想应该是nameent,但是您还将您的条目命名为nameent。不起作用

必须将StringVar()变量设置为不同于Entry变量,然后使用.get()获取StringVar()中的值

def deleteMovie():
    name=movie_name.get()
    conn = sqlite3.connect('moviedata.db')
    sql = "Delete from movies WHERE name=?"
    conn.execute(sql,(name,))
    messagebox.showinfo("information","MOVIE DELETED")
    conn.commit()
    conn.close()
#this is my entry
window = tk.Tk()
window.title("SP Movie Admin Form")
window.geometry("400x250")
window.resizable(0, 0)

lName = ttk.Label(window,text="Name",padding=2)
lName.grid(row=1,column=1,columnspan=1)
movie_name= StringVar()
nameent = ttk.Entry(window,textvariable=movie_name)
nameent.grid(row=1,column=2,columnspan=3)

buttondelete = ttk.Button(window,text="Delete",command=deleteMovie)
buttondelete.grid(row=7,column=2)

window.mainloop()

您的按钮回调需要获取它需要的数据,而不是让它传入。如果要保留接受参数的函数,可以专门为按钮创建一个函数,用于获取值,然后调用deleteMovie

例如:

def deleteCommand():
    name = nameent.get()
    deleteMovie(name)

然后,让您的按钮调用回调:

buttondelete = ttk.Button(window,text="Delete",command=deleteCommand)

当然,您可以使用一个函数,通过删除参数并调用get()方法来完成这两个任务:

def deleteMovie():
    name = nameent.get()
    conn = sqlite3.connect('moviedata.db')
    sql = "Delete from movies WHERE name=?"
    conn.execute(sql,(name,))
    messagebox.showinfo("information","MOVIE DELETED")
    conn.commit()
    conn.close()

相关问题 更多 >