IndexError: tuple index out of range

108 views
Skip to first unread message

Samuel Carlos Ribeiro

unread,
Mar 12, 2021, 3:20:39 PM3/12/21
to Python Brasil
Boa tarde

Pela localização no banco de dados a coluna de referido campo esta exato, mas insiste em dar o erro conforme titulo.
Segue o código

import datetime
import sqlite3
import tkinter.messagebox
from tkinter import *

conn = sqlite3.connect ( "C:\\Users\\Samuel\\Dropbox\\PycharmProjects\\TkinterVendas\\DataBase\\store.db" )
c = conn.cursor ( )

date = datetime.datetime.now ( ).date ( )

products_list = []
product_price = []
product_quantity = []
product_id = []


class Application:

    def __init__(selfmaster, *args, **kwargs):
        self.master = master

        self.left = Frame ( master, width=700height=768bg='white' )
        self.left.pack ( side=LEFT )

        self.right = Frame ( master, width=666height=768bg='lightblue' )
        self.right.pack ( side=RIGHT )

        self.heading = Label ( self.left, text="R. R. Incorporações Ltda."font=('arial 40 bold'), bg='lightblue' )
        self.heading.place ( x=0y=0 )

        self.date_1 = Label ( self.right, text="Data de Hoje: " + str ( date ), font='arial 16 bold',
                              bg='lightblue' )
        self.date_1.place ( x=0y=0 )

        self.produto = Label ( self.right, text="Produto:"font=('arial 18 bold'), bg='lightblue'fg='white' )
        self.produto.place ( x=0y=60 )

        self.quantidade = Label ( self.right, text="Quantidade:"font=('arial 18 bold'), bg='lightblue'fg='white' )
        self.quantidade .place ( x=300y=60 )

        self.valor = Label ( self.right, text="Valor:"font=('arial 18 bold'), bg='lightblue'fg='white' )
        self.valor.place ( x=500y=60 )

        self.inserir = Label ( self.left, text="Produto ID: "font=('arial 18 bold'), bg='white')
        self.inserir.place ( x=0y=80 )

        self.inserir = Entry (self.left, width=35bd="0"font='arial 16 bold'bg='Lavender' )
        self.inserir.place ( x=140y=80 )

        self.btn_pesquisar = Button (self.left, text="Pesquisar"width=25height=2,
                                font='arial 10 bold'bg='RoyalBlue'fg='white',commandself.jx  )
        self.btn_pesquisar.place(x=350 , y=120)

        self.nomeproduto = Label ( self.left, text=""font='arial 16 bold'bg='white'fg='MidnightBlue' )
        self.nomeproduto.place ( x=0y=250 )

        self.ppreco = Label ( self.left, text=""font='arial 16 bold'bg='white'fg='MidnightBlue' )
        self.ppreco.place ( x=0y=300 )

        self.total_1 = Label ( self.right, text="Valor Total: "font='arial 30 bold'bg='lightblue'fg='LightSalmon' )
        self.total_1.place ( x=0y=650 )

    def jx(self, *args, **kwargs):

        self.get_id = self.inserir.get()
        query = "SELECT name, stock, sp FROM inventory WHERE id=?"
        result = c.execute ( query, (self.get_id,))
        for self.r in result :
                self.get_id = self.r[0]
                self.get_name = self.r[1]
                self.get_stock = self.r[2]
                self.get_price = self.r[4]

        self.nomeproduto.configure(text = "Nome Produto: " + str(self.get_name))
        self.ppreco.configure (text="Valor Produto: R$ " + str(self.get_price))

        self.quantity_1 = Label ( self.left, text="Quantidade: "font='arial 16 bold'bg='white'fg='MidnightBlue' )
        self.quantity_1.place ( x=0y=370 )

        self.quantity_e = Entry ( self.left, width=30bd="0"font='arial 16 bold'bg='Lavender' )
        self.quantity_e.place ( x=190y=370 )
        self.quantity_e.focus()

        self.descunt_1 = Label ( self.left, text="Desconto: "font=('arial 16 bold'), bg='white'fg='MidnightBlue' )
        self.descunt_1.place ( x=0y=410 )

        self.descunt_e = Entry ( self.left, width=30bd="0"font='arial 16 bold'bg='Lavender' )
        self.descunt_e.place ( x=190y=410)
        self.descunt_e.insert(END, 0)

        self.car_btn = Button ( self.left, text="Carrinho"width=23height=2font='arial 10 bold'bg='RoyalBlue'fg='white')
        self.car_btn.place ( x=350y=450 )

        self.change_1 = Label ( self.left, text="Total Pago: "font='arial 16 bold'bg='white'fg='MidnightBlue' )
        self.change_1.place ( x=0y=550 )

        self.change_e = Entry ( self.left, width=30bd="0"font='arial 16 bold'bg='GreenYellow' )
        self.change_e.place ( x=190y=550 )

        self.change_btn = Button ( self.left, text="Calcular Troco"width=23height=2font='arial 10 bold'bg='tomato'fg='white' )
        self.change_btn.place ( x=350y=590 )

        self.Gerarrec_btn = Button ( self.left, text="Gerar Recibo"width=23height=2font='arial 10 bold',
                                   bg='Gold')
        self.Gerarrec_btn.place ( x=350y=640 )

    def car(self, *args, **kwargs) :
        self.quantity_value = int(self.quantity_e.get())
        if self.quantity_value >int(self.get_stock):
            tkinter.messagebox.showinfo("Atenção!!!","Quantidade Sugerida a Maior do que quantidade no Estoque.!")
        else:
            self.final_price = (float(self.quantity_value)*float(self.get_price))-(float(self.descunt_e.get()))
            products_list.append(self.get_name)
            product_price.append ( self.final_price)
            product_quantity.append ( self.quantity_value )
            product_id.append ( self.get_id )

            self.x_index = 0
            self.y_index = 100
            self.x_counter = 0

            for self.p in products_list:
                self.tempname = label(self.right, text = str(products_list[self.x_counter]), font = 'arial 18 bold'bg='ligthblue'fg='white')
                self.tempname.place(x=0y=y_index)
                labels_list.append(self.tempname)

                self.tempqt = label(self.right, text = str(product_quantity[self.x_counter]), font = 'arial 18 bold'bg='ligthblue'fg='white')
                self.tempqt.place(x=300y=y_index)
                labels_list.append(self.tempqt)

                self.tempprice = label(self.right, text = str(product_price[self.x_counter]), font = 'arial 18 bold'bg='ligthblue'fg='white')
                self.tempprice.place(x=500y=y_index)
                labels_list.append(self.tempprice)

            self.y_index += 40
            self.x_counter +=1




root = Tk ( )

b = Application ( root )
root.geometry ( "1366x768+0+0" )
root.title ( "R.R Incorporações Ltda." )

root.mainloop ( )

Ualassy Cevidanes

unread,
Mar 12, 2021, 3:41:18 PM3/12/21
to python...@googlegroups.com
   result = c.execute ( query, (self.get_id,))
        for self.r in result :
                self.get_id = self.r[0]
                self.get_name = self.r[1]
                self.get_stock = self.r[2]
                self.get_price = self.r[4]

Qual a linha do erro verifique se se rfere a esse trecho e cuspa o resultado todo de self para validar se realmente existem essas posicoes nas tuplas.
Ualassy Cevidanes



--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/597230ae-8ecb-4fbe-9adc-7314a2c5c980o%40googlegroups.com.

Samuel Carlos Ribeiro

unread,
Mar 12, 2021, 4:20:23 PM3/12/21
to Python Brasil
Boa noite Ualassi
Obrigado pelo retorno
A linha que aparece o erro é esta.

  self.get_price = self.r[4]

No banco de dados as colunas estão assin
0 = id
1 = name
2 = stock
3 = cp (preço de custo)
4 = sp (preço de vendas)

Joao S. O. Bueno

unread,
Mar 12, 2021, 5:11:17 PM3/12/21
to python...@googlegroups.com
O tamanho  da sua tupla de resposta é dado pelos campos que você pede na query, não pela
posilçao do campo na tabela no banco.

Como a query só solicita 4 items - sendo o último (na posiçao de índice 3), o 'sp', 
é ali que está seu valor. Os valores da coluna "cp" não estão na resposta.

É só mudar o seu código para:
self.get_price = self.r[3]

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages