【问题标题】:trying to define a delete function where user enters a name and clicks on the button and the row is deleted试图定义一个删除功能,其中用户输入名称并单击按钮并删除该行
【发布时间】:2019-12-09 03:04:57
【问题描述】:

尝试定义一个删除函数,其中用户输入一个名称并单击删除按钮和包含数据的行在 python 中的 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'

【问题讨论】:

    标签: python sqlite tkinter error-handling typeerror


    【解决方案1】:
    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()
    

    【讨论】:

    • 欢迎,不过,cmets 应该是为了澄清或额外的建议。如果它有效,只需将其标记为答案。
    【解决方案2】:

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

    例如:

    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()
    

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2015-09-20
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      相关资源
      最近更新 更多