Advertisement
JIST2018

Prueba_sqlite3_Tkinter

Dec 28th, 2018
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.83 KB | None | 0 0
  1. import sys
  2. import os
  3. from tkinter import ttk
  4. from tkinter import *
  5. #import psycopg2 as pg
  6. #from psycopg2.extras import DictCursor
  7.  
  8.  
  9. #conn = pg.connect("host=localhost dbname=video_tk3 user=postgres password=1234")
  10. #conn.set_client_encoding('UTF8')
  11. #print("Base de datos Abierta satisfactoriamente")
  12. #cur = conn.cursor()
  13.  
  14. import sqlite3
  15.  
  16. class Empleado():
  17.     db_name = 'videotk2.db'
  18.  
  19.     def __init__(self, window):
  20.  
  21.         self.wind = window
  22.         self.wind.title('NOMINA EMPLEADOS')
  23.  
  24.  
  25.         # Creating a Frame Container
  26.  
  27.         frame = LabelFrame(self.wind, text='Registre el nuevo Empleado')
  28.         frame.grid(row=0, column=0, columnspan=3, pady=20)
  29.  
  30.         # Name Input
  31.         Label(frame, text='Nombre: ').grid(row=1, column= 0, columnspan=1)
  32.         self.name = Entry(frame)
  33.         self.name.focus()
  34.  
  35.         self.name.grid(row=1, column=1)
  36.  
  37.         # Price Input
  38.  
  39.         Label(frame, text='Salario: ').grid(row=2, column=0)
  40.         self.price = Entry(frame)
  41.         self.price.grid(row=2, column=1)
  42.  
  43.         # Button Add Product
  44.         ttk.Button(frame, text='Guardar Empleado', command = self.add_empleado).grid(row=3, columnspan=2, sticky=W + E)
  45.  
  46.         # Output Messages
  47.         self.message = Label(text='', fg='red')
  48.         self.message.grid(row=3, column=0, columnspan=2, sticky=W + E)
  49.  
  50.         # Table
  51.         self.tree = ttk.Treeview( height=10, columns=3)
  52.         self.tree.grid(row=4, column=0, columnspan=2)
  53.         self.tree.heading('#0', text='Nombre', anchor=CENTER)
  54.         self.tree.heading('#1', text='Salario', anchor=CENTER)
  55.  
  56.         # Buttons
  57.         ttk.Button(text='DELETE', command=self.delete_empleado).grid(row=5, column=0, sticky=W + E)
  58.         ttk.Button(text = 'EDIT', command = self.edit_empleado).grid(row = 5, column = 1, sticky = W + E)
  59.  
  60.  
  61.         self.get_empleados()
  62.  
  63.         # Function to Execute Database Querys
  64.  
  65.     def run_query(self, query, parameters=()):
  66.         with sqlite3.connect(self.db_name) as conn:
  67.             cursor = conn.cursor()
  68.             result = cursor.execute(query, parameters)
  69.             conn.commit()
  70.         return result
  71.  
  72.  
  73.     # Get Products from Database
  74.         # Get Products from Database
  75.  
  76.     def get_empleados(self):
  77.         # cleaning Table
  78.         records = self.tree.get_children()
  79.  
  80.         for element in records:
  81.             self.tree.delete(element)
  82.         query = 'SELECT * FROM empleado ORDER BY id'
  83.  
  84.         db_rows = self.run_query(query)
  85.         # filling data
  86.         for row in db_rows:
  87.             self.tree.insert('', 0, text=row[1], values=row[2])
  88.  
  89.  
  90.  
  91.     # User Input Validation
  92.     def validation(self):
  93.         return len(self.name.get()) != 0 and len(self.price.get()) != 0
  94.  
  95.     def add_empleado(self):
  96.         if self.validation():
  97.  
  98.             query ='INSERT INTO empleado VALUES (NULL, ?,?)'
  99.             parameters =  (self.name.get(), self.price.get())
  100.             self.run_query(query, parameters)
  101.             self.message['text'] = 'Empleado {} Adiccionado Satisfactoriamente'.format(self.name.get())
  102.             self.name.delete(0, END)
  103.             self.price.delete(0, END)
  104.  
  105.         else:
  106.             self.message['text'] = 'Nombre and Salario son Requridos'
  107.         self.get_empleados()
  108.  
  109.     def delete_empleado(self):
  110.         self.message['text'] = ''
  111.         try:
  112.            self.tree.item(self.tree.selection())['text'][0]
  113.         except IndexError as e:
  114.             self.message['text'] = 'Please select a Record'
  115.             return
  116.         self.message['text'] = ''
  117.         name = self.tree.item(self.tree.selection())['text']
  118.         query = 'DELETE FROM empleado WHERE nombre = ?'
  119.         self.run_query(query, (name, ))
  120.         self.message['text'] = 'Record {} deleted Successfully'.format(name)
  121.         self.get_empleados()
  122.  
  123.     def edit_empleado(self):
  124.         self.message['text'] = ''
  125.         try:
  126.             self.tree.item(self.tree.selection())['values'][0]
  127.         except IndexError as e:
  128.             self.message['text'] = 'Por Favor Selecione el Empleado'
  129.             return
  130.         name = self.tree.item(self.tree.selection())['text']
  131.         old_price = self.tree.item(self.tree.selection())['values'][0]
  132.         self.edit_wind = Toplevel()
  133.         self.edit_wind.title = 'Editar Empleados'
  134.         # Old Name
  135.         Label(self.edit_wind, text = 'Nombre Actual:').grid(row = 0, column = 1)
  136.         Entry(self.edit_wind, textvariable = StringVar(self.edit_wind, value = name), state = 'readonly').grid(row = 0, column = 2)
  137.         # New Name
  138.         Label(self.edit_wind, text = 'Nuevo Salario:').grid(row = 1, column = 1)
  139.         new_name = Entry(self.edit_wind)
  140.         new_name.grid(row = 1, column = 2)
  141.  
  142.         # Old Price
  143.         Label(self.edit_wind, text = 'Salario Actual:').grid(row = 2, column = 1)
  144.         Entry(self.edit_wind, textvariable = StringVar(self.edit_wind, value = old_price), state = 'readonly').grid(row = 2, column = 2)
  145.         # New Price
  146.         Label(self.edit_wind, text = 'Nuevo Nombre:').grid(row = 3, column = 1)
  147.         new_price= Entry(self.edit_wind)
  148.         new_price.grid(row = 3, column = 2)
  149.  
  150.         Button(self.edit_wind, text = 'Actualizar', command = lambda: self.edit_records(new_name.get(), name, new_price.get(), old_price)).grid(row = 4, column = 2, sticky = W)
  151.         self.edit_wind.mainloop()
  152.  
  153.     def edit_records(self, new_name, name, new_price, old_price):
  154.         query = 'UPDATE empleado SET nombre = ?, salario = ? WHERE nombre = ? AND salario = ?'
  155.         parameters = (new_name, new_price,name, old_price)
  156.         self.run_query(query, parameters)
  157.         self.edit_wind.destroy()
  158.         self.message['text'] = 'Empleado {} Actualizado Satisfactoriamente'.format(name)
  159.         self.get_empleados()
  160.  
  161.  
  162.  
  163. if __name__ == '__main__':
  164.     window = Tk()
  165.     application = Empleado(window)
  166.     window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement