Удалить строки, выбранные в древовидной структуре Python GUI, а затем удалить их из базы данных sqlite3 - PullRequest
0 голосов
/ 11 февраля 2019

Я использую tkinter.У меня есть древовидная структура, и я отображаю данные в виде древовидной структуры из базы данных SQlite DB.Однако я добавил функцию удаления, чтобы иметь возможность выбирать значения из древовидного списка, а затем удалять их с помощью функции и кнопки удаления.Он удаляется из дерева, но не удаляется из базы данных.

def delete():
name2 = name_1.get()
phone2 = phone_number.get()
conn2 = sq.connect('Clients.db')
c2 = conn2.cursor()
selected_item = tree1.selection_set()
query = "DELETE FROM clients WHERE name=? AND phone=?"
c2.execute(query,(selected_item,))
conn2.commit()
tree1.delete(selected_item)






root = Tk()
root.geometry("800x800")
root.title("Hello")
root.configure(background="powder blue")
header = Label(root, text = "Clients Database",    font=("arial",30,"bold")).pack()

con = sq.connect('Clients.db')
c = con.cursor()
c.execute("CREATE TABLE IF NOT EXISTS clients (name TEXT, phone TEXT)")
con.commit


tree1 = ttk.Treeview(root, height=10, columns=("Name", "PhoneNumber"),   show=["headings"])
tree1.column('Name', anchor=W)
tree1.column('PhoneNumber', anchor=W)
tree1.heading('Name', text="Name")
tree1.heading('PhoneNumber', text="Phone Number")

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

Exception 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/Ingredients .py", line 38, in delete
c2.execute(query,(selected_item,))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The  current statement uses 2, and there are 1 supplied.

1 Ответ

0 голосов
/ 13 февраля 2019

Мне интересно, почему вы используете selected_item = tree1.selection_set().

Из документов:

selection_set (* items)

items становится новым выделением.

Изменено в версии 3.6: элементы могут бытьпередается как отдельные аргументы, а не как один кортеж.

Мне кажется, вы должны использовать tree.selection() вместо.

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