I'm doing a small app in python (3.6) and I'm using sqlite3 as a database. The app in question is a modification that you take out of a tutorial to make a book registry with tkinter. I have almost 0 programming experience, I am in full training and I am stuck with the following error: line 16, in get_selected_row e4.insert (END, selected_tuple [4]) IndexError: tuple index out of range
CODE: Frontend:
import tkinter as tk
from tkinter import *
import testb
def get_selected_row(event):
global selected_tuple
index=list1.curselection()[0]
selected_tuple=list1.get(index)
e1.delete(0,END)
e1.insert(END,selected_tuple[1])
e2.delete(0,END)
e2.insert(END,selected_tuple[2])
e3.delete(0,END)
e3.insert(END,selected_tuple[3])
e4.delete(0,END)
e4.insert(END,selected_tuple[4])
def get_selected_rowb(event):
global selected_tuple
index=lstb.curselection()[0]
selected_tuple=lstb.get(index)
e1.delete(0,END)
e1.insert(END,selected_tuple[1])
e2.delete(0,END)
e2.insert(END,selected_tuple[2])
e3.delete(0,END)
e3.insert(END,selected_tuple[3])
e4.delete(0,END)
e4.insert(END,selected_tuple[4])
def view_command():
list1.delete(0,END)
for row in testb.view():
list1.insert(END,row)
def search_command():
list1.delete(0,END)
for row in testb.search(nombre_text.get(),
telefono_text.get(),
direccion_text.get(),
observaciones_text.get()):
list1.insert(END,row)
def search_commandb():
lstb.delete(0,END)
for row in testb.search(nombre_text.get()):
lstb.insert(END,row)
def add_command():
testb.insert(nombre_text.get(),
telefono_text.get(),
direccion_text.get(),
observaciones_text.get())
list1.delete(0,END)
list1.insert(END,(nombre_text.get(),
telefono_text.get(),
direccion_text.get(),
observaciones_text.get()))
def delete_command():
testb.delete(selected_tuple[0])
def update_command():
testb.update(selected_tuple[0],
nombre_text.get(),
telefono_text.get(),
direccion_text.get(),
observaciones_text.get())
root = Tk()
root.title("Gestor Di Greco - Agenda")
root.iconbitmap("logo2 (1).ico")
root.configure(background='dark sea green')
Ll = Label(root, font=("Helvetica", 11, "bold italic"), background='medium
aquamarine',relief='ridge', text = "CLIENTE:")
Ll.grid(row=0,column = 0)
Ll = Label(root, background='medium aquamarine',relief='ridge', font=
("Helvetica", 11, "bold italic"), text = "TELEFONO:")
Ll.grid(row=0,column = 2)
Ll = Label(root,font=("Helvetica", 11, "bold italic"), background='medium
aquamarine', relief='ridge',text = "DIRECCION:")
Ll.grid(row=1,column = 0)
Ll = Label(root,font=("Helvetica", 11, "bold italic") , background='medium
aquamarine', relief='ridge',text = "OBSERVACIONES:")
Ll.grid(row=1,column = 2)
nombre_text = StringVar()
e1=Entry(root,textvariable=nombre_text)
e1.grid(row=0,column=1)
telefono_text = StringVar()
e2=Entry(root,textvariable=telefono_text)
e2.grid(row=0,column=3,)
direccion_text = StringVar()
e3=Entry(root,textvariable=direccion_text)
e3.grid(row=1,column=1)
observaciones_text = StringVar()
e4=Entry(root,textvariable=observaciones_text)
e4.grid(row=1,column=3)
list1=Listbox(root, height = 20, width = 150)
list1.grid(row=2,column=0, rowspan=7, columnspan=5)
sb1=Scrollbar(root)
sb1.grid(row=2,column=7,rowspan=6)
list1.configure(yscrollcommand = sb1.set)
sb1.configure(command = list1.yview)
list1.bind('<<ListboxSelect>>',get_selected_row)
b1 = Button(root,text = "Ver todos", width =12, command=view_command)
b1.grid(row=2, column=11)
b2 = Button(root,text = "Buscar cliente", width =12, command=search_command)
b2.grid(row = 3, column=11)
b3 = Button(root,text = "Agregar cliente", width =12, command=add_command)
b3.grid(row = 4, column=11)
b4= Button(root,text = "Actualizar cliente", width =12, command =
update_command)
b4.grid(row = 5, column=11)
b5 = Button(root,text = "Eliminar cliente", width =12, command =
delete_command)
b5.grid(row = 6, column=11)
b6 = Button(root,text = "Cuenta Corriente", width =12, command= ingresar)
b6.grid(row = 7, column=11)
b7= Button(root,text = "CERRAR", width =12)
b7.grid(row = 8, column=11)
root.mainloop()
Backend:
import sqlite3
from sqlite3 import *
def connect():
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS clientes (
id_cliente INT PRIMARY KEY,
nombre text NOT NULL,
telefono INT NOT NULL,
direccion text,
observaciones text)
''')
cur.execute('''CREATE TABLE IF NOT EXISTS libro (
id_cliente INT ,
debe NUMERIC,
haber NUMERIC,
fecha DATE,
FOREIGN KEY (id_cliente) REFERENCES
clientes(id_cliente)
ON DELETE CASCADE)''')
conn.commit()
conn.close()
def insert(nombre,telefono,direccion,observaciones):
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("INSERT INTO clientes VALUES (NULL,?,?,?,?)",
(nombre,telefono,direccion,observaciones))
conn.commit()
conn.close()
view()
def view():
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("SELECT nombre,telefono,direccion,observaciones FROM
clientes")
rows=cur.fetchall()
conn.close()
return rows
def search(nombre="", telefono="", direccion="", observaciones=""):
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("SELECT * FROM clientes WHERE nombre=? OR telefono=? OR
direccion=? OR observaciones=?", (nombre,telefono,direccion,observaciones))
rows=cur.fetchall()
conn.close()
return rows
def delete(id_cliente):
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("DELETE FROM clientes WHERE id_cliente=?",(id_cliente,))
conn.commit()
conn.close()
def update(nombre,telefono,direccion,observaciones):
conn=sqlite3.connect("books.db")
cur=conn.cursor()
cur.execute("UPDATE book SET nombre=?, telefono=?, direccion=?,
observaciones=? WHERE id=?",(title,author,year,isbn))
conn.commit()
conn.close()
connect()