Обновление Tkinter Treeview с базой данных SQLite - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь обновить дерево, используя функцию удаления, но не могу получить информацию для передачи.У меня есть old name и old phone number, и я хочу обновить их до new name и new phone number.Я продолжаю сталкиваться с той же проблемой.Вот мой код ниже:

def update():
 update_opt = Toplevel()
 update_opt.title("Updating")
 # grabbing old values from table 
 old_name = StringVar(update_opt, tree1.item(tree1.focus())['values'][0])
 old_phone = StringVar(update_opt, tree1.item(tree1.focus())['values'][1])

 Phone = StringVar(update_opt)
 Name = StringVar(update_opt)

 # creating labels for new/old values
 lbl1 = Label(update_opt, text="Old Name: ").grid(row=0,column=1)
 pre_name = Entry(update_opt, textvariable=old_name,state='readonly')
 pre_name.grid(row=0,column=2)

 lbl2 = Label(update_opt, text="New name: ").grid(row=1,column=1)
 new_name = Entry(update_opt, textvariable=Name).grid(row=1,column=2)
 #New_Name = new_name.get()


 lbl3 = Label(update_opt, text="Old Phone Number: ").grid(row=2,column=1)
 pre_phonenumber = Entry(update_opt, textvariable=old_phone, state='readonly')
 pre_phonenumber.grid(row=2,column=2)

 lbl4 = Label(update_opt, text="New Phone Number: ").grid(row=3,column=1)
 new_phonenumber = Entry(update_opt, textvariable=Phone).grid(row=3,column=2)
 #New_Number = new_phonenumber.get()

 save_btn = ttk.Button(update_opt, text="Save Changes",
                      command = lambda:save_changes(new_name,old_name,
                                                    new_phonenumber,
                                                    old_phone))
 save_btn.grid(row=4,column=2,sticky=W)


 update_opt.mainloop()




def save_changes(new_name, old_name, new_phonenumber, old_phone):

    selected_item = tree1.selection()

    #gets the values associated with the selected item
    values = (tree1.item(selected_item)['values'])

    query = 'UPDATE clients SET name=?, phone=? WHERE name=? AND phone=?'
    parameters=(new_name, new_phonenumber, old_name, old_phone)
    conn = sq.connect('Clients.db')
    c3 = conn.cursor()

    c3.execute(query, (new_name, new_phonenumber, values,))
    conn.commit()
    tree1.delete(selected_item)
    edit_wind.destroy()
    display_clients()

Я получаю эту ошибку:

xception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python3.6/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
    File "/home/zizibaby/Desktop/SD Functions .py", line 77, in <lambda>
        old_phone))
    File "/home/zizibaby/Desktop/SD Functions .py", line 98, in save_changes
        c3.execute(query, (new_name, new_phonenumber, values,))
    sqlite3.ProgrammingError: Incorrect number of bindings supplied. 
    The current statement uses 4, and there are 3 supplied.

Я добавил tree.selection, чтобы фактически получить значение, однако оно не работает.Я попробовал .get() функцию, но она говорит NoneType для get().

Пожалуйста, помогите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...