EmaSMach

Treeview plus sqlite3 (python - tkinter)

Mar 19th, 2020
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.96 KB | None | 0 0
  1. from tkinter import *
  2. from tkinter import ttk
  3. from tkinter import messagebox
  4. import sqlite3
  5.  
  6. # --------FUNCIONES---------------------------------------------
  7.  
  8. db_personal = "Personal"
  9.  
  10.  
  11. def conexionBBDD():
  12.     miConexion = sqlite3.connect("Personal")
  13.  
  14.     try:
  15.         miCursor = miConexion.cursor()
  16.         miCursor.execute('''
  17.            CREATE TABLE DATOSPERSONAL (NOMBRE_PERSONAL VARCHAR (59),
  18.            APELLIDO VARCHAR(50),
  19.            DNI INTEGER (8) PRIMARY KEY)''')
  20.  
  21.         messagebox.showinfo("BBDD", "Base de datos creada con éxito")
  22.  
  23.     except:
  24.  
  25.         messagebox.showwarning("¡Aviso!", "La base de datos ya ha sido creada")
  26.  
  27.  
  28. def salir():
  29.     valor = messagebox.askquestion("Salir", "¿Desea salir de la aplicación?")
  30.  
  31.     if valor == "yes":
  32.         root.destroy()
  33.  
  34.  
  35. def agregar():
  36.  
  37.     ventanaAgregar = Toplevel(root)
  38.     ventanaAgregar.title("Agregar personal")
  39.     ventanaAgregar.geometry("270x200+460+180")
  40.     ventanaAgregar.resizable(0, 0)
  41.     ventanaAgregar.transient(root)
  42.     miFrameAgregar = Frame(ventanaAgregar)
  43.     miFrameAgregar.pack()
  44.  
  45.     espacioLabel = Label(miFrameAgregar, text="")
  46.     espacioLabel.grid(row=0, column=0, columnspan=2)
  47.     nombreAddLabel = Label(miFrameAgregar, text="Nombre:")
  48.     nombreAddLabel.grid(row=1, column=0, sticky="se", padx=5, pady=10)
  49.     apellidoAddLabel = Label(miFrameAgregar, text="Apellido:")
  50.     apellidoAddLabel.grid(row=2, column=0, sticky="se", padx=5, pady=10)
  51.     dniAddLabel = Label(miFrameAgregar, text="DNI:")
  52.     dniAddLabel.grid(row=3, column=0, sticky="se", padx=5, pady=10)
  53.  
  54.     miNombre = StringVar()
  55.     miApellido = StringVar()
  56.     miDni = StringVar()
  57.  
  58.     nombreAddEntry = Entry(miFrameAgregar, textvariable=miNombre)
  59.     nombreAddEntry.grid(row=1, column=1, padx=5, pady=10, sticky="s")
  60.     apellidoAddEntry = Entry(miFrameAgregar, textvariable=miApellido)
  61.     apellidoAddEntry.grid(row=2, column=1, padx=5, pady=10, sticky="s")
  62.     dniAddEntry = Entry(miFrameAgregar, textvariable=miDni)
  63.     dniAddEntry.grid(row=3, column=1, padx=5, pady=10, sticky="s")
  64.  
  65.     def crear():
  66.         miConexion = sqlite3.connect("Personal")
  67.         miCursor = miConexion.cursor()
  68.         datos = miNombre.get(), miApellido.get(), miDni.get()
  69.         miCursor.execute("INSERT INTO DATOSPERSONAL VALUES(?,?,?)", (datos))
  70.  
  71.         miConexion.commit()
  72.  
  73.         # D.E.S changes. lol
  74.         # Excecuting my new functions
  75.         limpiar_tabla(tabla)                # LINE 1
  76.         cargar_datos(miConexion, tabla)     # LINE 2
  77.  
  78.         messagebox.showinfo("BBDD", "Registrado con éxito")
  79.  
  80.     def cerrarAgregar():
  81.         aceptarBoton = True
  82.  
  83.         if aceptarBoton == True:
  84.             ventanaAgregar.destroy()
  85.  
  86.     aceptarBoton = Button(ventanaAgregar, text="Aceptar",
  87.                           command=lambda: [cerrarAgregar(), crear()])
  88.     aceptarBoton.place(x=100, y=160)
  89.     cancelarBoton = Button(ventanaAgregar, text="Cancelar", command=cerrarAgregar)
  90.     cancelarBoton.place(x=175, y=160)
  91.  
  92.  
  93.     # D.E.S changes, lol,
  94.     # Functions added to clear and load data from db
  95.     def limpiar_tabla(tabla):
  96.         """
  97.        Clear the treeview widget.
  98.        Delete all the entries.
  99.        """
  100.         children = tabla.get_children()
  101.         if children:
  102.             tabla.delete(*children)
  103.  
  104.     def cargar_datos(conexion, tabla):
  105.         """
  106.        Populates the treeivew with data from db.
  107.  
  108.        param: conexion  an sqlite3 connection object
  109.        param: tabla     a treeivew widget object where data will be inserted/displayed
  110.        """
  111.         try:
  112.             cursor = conexion.cursor()
  113.             datos = cursor.execute("""SELECT * FROM DATOSPERSONAL""")
  114.             for entrada in datos.fetchall():
  115.                 tabla.insert('', END, values=entrada)
  116.         except Exception as e:
  117.             print(e)
  118.  
  119. # ------RAIZ---------------------------------------------------------------------
  120.  
  121.  
  122. root = Tk()
  123. root.geometry("360x440+430+90")
  124.  
  125. # -----MENU----------------------------------------------------------------------
  126.  
  127. barraMenu = Menu(root)
  128. root.config(menu=barraMenu)
  129.  
  130. bbddMenu = Menu(barraMenu, tearoff=0)
  131. bbddMenu.add_command(label="Conectar", command=conexionBBDD)
  132. bbddMenu.add_command(label="Salir", command=salir)
  133.  
  134. ayudaMenu = Menu(barraMenu, tearoff=0)
  135. ayudaMenu.add_command(label="Acerca de...")
  136.  
  137. barraMenu.add_cascade(label="Archivo", menu=bbddMenu)
  138. barraMenu.add_cascade(label="Ayuda", menu=ayudaMenu)
  139.  
  140.  
  141. miFrame = Frame(root)
  142. miFrame.pack()
  143.  
  144.  
  145. # ----BOTON FRAME 1---------------------------------------------
  146.  
  147. botonActualizar = Button(miFrame, text="Actualizar")
  148. botonActualizar.grid(row=0, column=0, sticky="sw", padx=10, pady=20)
  149.  
  150. botonAgregar = Button(miFrame, text="Agregar", command=agregar)
  151. botonAgregar.grid(row=0, column=1, sticky="sw", padx=10, pady=20)
  152.  
  153. botonEditar = Button(miFrame, text="Editar")
  154. botonEditar.grid(row=0, column=2, sticky="sw", padx=10, pady=20)
  155.  
  156. botonBorrar = Button(miFrame, text="Borrar")
  157. botonBorrar.grid(row=0, column=3, sticky="sw", padx=10, pady=20)
  158.  
  159.  
  160. # -----TABLA-----------------------------------------------------
  161.  
  162. miFrame2 = Frame(root)
  163. miFrame2.pack()
  164.  
  165. # D.E.S changes:
  166. # setting meaningful column names/fields
  167. column_fields = ('nombre', 'apellido', 'dni',)
  168. tabla = ttk.Treeview(miFrame2, height=15, columns=column_fields)
  169. tabla.config(show='headings') # showing headings only
  170. tabla.grid(row=1, column=0, columnspan=4, sticky="nsew", padx=10)
  171. # passing the new column names or identifiers to the .heading() method
  172. tabla.heading("nombre", text="Nombre", anchor="center")
  173. tabla.heading("apellido", text="Apellido", anchor="center")
  174. tabla.heading("dni", text="DNI", anchor="center")
  175. tabla.column("nombre", stretch="no", width=110)
  176. tabla.column("apellido", stretch="no", width=110)
  177. tabla.column("dni", stretch="no", width=90)
  178.  
  179. tabla.rowconfigure(0, weight=1)
  180. tabla.columnconfigure(0, weight=1)
  181. tabla.rowconfigure(1, weight=1)
  182. tabla.columnconfigure(1, weight=1)
  183.  
  184.  
  185. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment