Я пытаюсь обновить дерево, используя функцию удаления, но не могу получить информацию для передачи.У меня есть 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()
.
Пожалуйста, помогите?