Buscar por Nombre con SQLite y Python
Formulario principal
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as mb
from tkinter import scrolledtext as st
import articulos2
class FormularioArticulos:
def __init__(self):
self.articulo1=articulos2.Articulos()
self.ventana1=tk.Tk()
self.ventana1.title("Mantenimiento de artículos")
self.ventana1.geometry("500x500+400+200")
self.cuaderno1 = ttk.Notebook(self.ventana1)
self.carga_articulos()
self.consulta_por_codigo()
self.listado_completo()
self.Buscar()
self.cuaderno1.grid(column=0, row=0, padx=10, pady=10)
self.ventana1.mainloop()
def carga_articulos(self):
self.pagina1 = ttk.Frame(self.cuaderno1)
self.cuaderno1.add(self.pagina1, text="Carga de artículos")
self.labelframe1=ttk.LabelFrame(self.pagina1, text="Artículo")
self.labelframe1.grid(column=0, row=0, padx=5, pady=10)
self.label1=ttk.Label(self.labelframe1, text="Descripción:")
self.label1.grid(column=0, row=0, padx=4, pady=4)
self.descripcioncarga=tk.StringVar()
self.entrydescripcion=ttk.Entry(self.labelframe1, textvariable=self.descripcioncarga)
self.entrydescripcion.grid(column=1, row=0, padx=4, pady=4)
self.label2=ttk.Label(self.labelframe1, text="Precio:")
self.label2.grid(column=0, row=1, padx=4, pady=4)
self.preciocarga=tk.StringVar()
self.entryprecio=ttk.Entry(self.labelframe1, textvariable=self.preciocarga)
self.entryprecio.grid(column=1, row=1, padx=4, pady=4)
self.boton1=ttk.Button(self.labelframe1, text="Confirmar", command=self.agregar)
self.boton1.grid(column=1, row=2, padx=4, pady=4)
def agregar(self):
datos=(self.descripcioncarga.get(), self.preciocarga.get())
self.articulo1.alta(datos)
mb.showinfo("Información", "Los datos fueron cargados")
self.descripcioncarga.set("")
self.preciocarga.set("")
def consulta_por_codigo(self):
self.pagina2 = ttk.Frame(self.cuaderno1)
self.cuaderno1.add(self.pagina2, text="Consulta por código")
self.labelframe2=ttk.LabelFrame(self.pagina2, text="Artículo")
self.labelframe2.grid(column=0, row=0, padx=5, pady=10)
self.label1=ttk.Label(self.labelframe2, text="Código:")
self.label1.grid(column=0, row=0, padx=4, pady=4)
self.codigo=tk.StringVar()
self.entrycodigo=ttk.Entry(self.labelframe2, textvariable=self.codigo)
self.entrycodigo.grid(column=1, row=0, padx=4, pady=4)
self.label2=ttk.Label(self.labelframe2, text="Descripción:")
self.label2.grid(column=0, row=1, padx=4, pady=4)
self.descripcion=tk.StringVar()
self.entrydescripcion=ttk.Entry(self.labelframe2, textvariable=self.descripcion, state="readonly")
self.entrydescripcion.grid(column=1, row=1, padx=4, pady=4)
self.label3=ttk.Label(self.labelframe2, text="Precio:")
self.label3.grid(column=0, row=2, padx=4, pady=4)
self.precio=tk.StringVar()
self.entryprecio=ttk.Entry(self.labelframe2, textvariable=self.precio, state="readonly")
self.entryprecio.grid(column=1, row=2, padx=4, pady=4)
self.boton1=ttk.Button(self.labelframe2, text="Consultar", command=self.consultar)
self.boton1.grid(column=1, row=3, padx=4, pady=4)
def consultar(self):
datos=(self.codigo.get(), )
respuesta=self.articulo1.consulta(datos)
if len(respuesta)>0:
self.descripcion.set(respuesta[0][0])
self.precio.set(respuesta[0][1])
else:
self.descripcion.set('')
self.precio.set('')
mb.showinfo("Información", "No existe un artículo con dicho código")
def Buscar(self):
self.pagina4 = ttk.Frame(self.cuaderno1)
self.cuaderno1.add(self.pagina4,text="Buscar por Nombre")
self.labelFrame4=ttk.LabelFrame(self.pagina4,text="Articulo")
self.labelFrame4.grid(column=0,row=0,padx=5,pady=10)
self.label6=ttk.Label(self.labelFrame4, text="Nombre:")
self.label6.grid(column=0, row=0, padx=4, pady=4)
self.nombre=tk.StringVar()
self.entrynombre=ttk.Entry(self.labelFrame4, textvariable=self.nombre)
self.entrynombre.grid(column=1, row=0, padx=4, pady=4)
self.boton6=ttk.Button(self.labelFrame4, text="Consultar", command=self.consultar2)
self.boton6.grid(column=2, row=0, padx=4, pady=4)
self.listbox1=tk.Listbox(self.labelFrame4,width=35)
self.listbox1.grid(column=1,row=4,padx=4,pady=4)
self.boton8=ttk.Button(self.labelFrame4, text="Seleccionar", command=self.sele1)
self.boton8.grid(column=2,row=4)
def consultar2(self):
datos2=self.nombre.get()
respuesta2=self.articulo1.por_nombre(datos2)
self.listbox1.delete(0,tk.END)
for fila in respuesta2:
self.listbox1.insert(tk.END,str(fila[0])+" "+fila[1]+" "+str(fila[2]))
def sele1(self):
if len(self.listbox1.curselection())!=0:
self.listbox1.get(self.listbox1.curselection()[0])
def listado_completo(self):
self.pagina3 = ttk.Frame(self.cuaderno1)
self.cuaderno1.add(self.pagina3, text="Listado completo")
self.labelframe3=ttk.LabelFrame(self.pagina3, text="Artículo")
self.labelframe3.grid(column=0, row=0, padx=5, pady=10)
self.boton1=ttk.Button(self.labelframe3, text="Listado completo", command=self.listar)
self.boton1.grid(column=0, row=0, padx=4, pady=4)
self.label7=ttk.Label(self.labelframe3, text="Código\tDescripcion\t\t\tPrecio")
self.label7.grid(column=0, row=1, padx=1, pady=1)
self.scrolledtext1=st.ScrolledText(self.labelframe3, width=40, height=15)
self.scrolledtext1.grid(column=0,row=2, padx=10, pady=10)
# self.scrolltext2=st.ScrolledText(self.labelframe3, width=7, height=10)
# self.scrolltext2.grid(column=1,row=1,padx=5,pady=5)
def listar(self):
respuesta=self.articulo1.recuperar_todos()
self.scrolledtext1.delete("1.0", tk.END)
for fila in respuesta:
self.scrolledtext1.insert(tk.END, str(fila[0])+"\t"+fila[1]+"\t\t\t"+str(fila[2])+"\n")
# self.scrolltext2.insert(tk.END, str(fila[2])+"\n")
aplicacion1=FormularioArticulos()
articulos2.py
import sqlite3
class Articulos:
def abrir(self):
conexion=sqlite3.connect("bd1.db")
return conexion
def alta(self, datos):
cone=self.abrir()
cursor=cone.cursor()
sql="insert into articulos(descripcion, precio) values (?,?)"
cursor.execute(sql, datos)
cone.commit()
cone.close()
def consulta(self, datos):
try:
cone=self.abrir()
cursor=cone.cursor()
sql="select descripcion, precio from articulos where codigo=?"
cursor.execute(sql, datos)
return cursor.fetchall()
finally:
cone.close()
def por_nombre(self, datos2):
try:
cone=self.abrir()
cursor=cone.cursor()
sql="select * from articulos where descripcion like '"+str(datos2)+"%'"
cursor.execute(sql)
return cursor.fetchall()
finally:
cone.close()
def recuperar_todos(self):
try:
cone=self.abrir()
cursor=cone.cursor()
sql="select codigo, descripcion, precio from articulos"
cursor.execute(sql)
return cursor.fetchall()
finally:
cone.close()
minuvasoft10@gmail.com
Miguel Nunez
Primero ejecutar el archivo crearTabla.py una vez
import sqlite3
conexion=sqlite3.connect("bd1.db")
try:
conexion.execute("""create table articulos (
codigo integer primary key autoincrement,
descripcion text,
precio real
)""")
print("se creo la tabla articulos")
except sqlite3.OperationalError:
print("La tabla articulos ya existe")
conexion.close()
buenisimo.. pero si borrara los articulos seria mejor.. !
ResponderEliminar