Python, tkinter and Sqlite3 Error selecting an item in the listbox

0

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()
    
asked by TuKe 05.11.2018 в 00:30
source

0 answers