Advertisement
JIST2018

Tkinter-Postgres

Dec 17th, 2018
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.49 KB | None | 0 0
  1. import sys
  2. import os
  3. from tkinter import ttk
  4. from tkinter import *
  5. import tkinter as tk
  6. import psycopg2 as pg
  7. from psycopg2.extras import *
  8.  
  9. import psycopg2.extensions
  10. import config
  11. from tabulate import *
  12.  
  13.  
  14. from tkinter.font import *
  15. import psycopg2.extensions
  16.  
  17. psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
  18. psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
  19.  
  20.  
  21. conn = pg.connect("host=localhost dbname=videotk_3 user=postgres password=1234")
  22. conn.set_client_encoding('UTF8')
  23. #print("Base de datos Abierta satisfactoriamente")
  24. cur = conn.cursor()
  25.  
  26. root = Tk
  27.  
  28. class Empleado():
  29.     #db_name = 'videotk3.db'
  30.  
  31.     def __init__(self, window):
  32.  
  33.         self.wind = window
  34.         #self.wind.geometry(200, 200)
  35.         self.wind.title('NOMINA EMPLEADOS')
  36.  
  37.         # font config
  38.         self.ff10 = Font(family="Consolas", size=11)
  39.         self.ff10b = Font(family="Consolas", size=11, weight=BOLD)
  40.  
  41.        
  42.         s = ttk.Style()
  43.         s.configure("Foo2.Treeview", font=self.ff10, padding=1)
  44.         s.configure("Foo2.Treeview.Heading", font=self.ff10b, padding=1)
  45.  
  46.  
  47.         # Creating a Frame Container
  48.  
  49.         frame = LabelFrame(self.wind, text='REGISTRE EL NUEVO EMPLEADO  :')
  50.         #ttk.Button(frame, text='Guardar Empleado').grid(row=0, columnspan=0, sticky=W + E)
  51.         frame.grid(row=0, column=0 )
  52.  
  53.         # Name Input
  54.         Label(frame, text='nombre: ').grid(row=2, column=0)
  55.         self.nombre = Entry(frame)
  56.         # self.name.focus()
  57.         self.nombre.grid(row=2, column=1)
  58.  
  59.         # Price Input
  60.  
  61.         Label(frame, text='salario: ').grid(row=2, column=2 )
  62.         self.salario = Entry(frame)
  63.         self.salario.grid(row=2, column=3)
  64.  
  65.  
  66.  
  67.         # Button Add Product
  68.         ttk.Button(frame, text='Guardar Empleado', command = self.add_empleado).grid(row=14, columnspan=8, ipady=9, sticky="")
  69.  
  70.         # Output Messages
  71.         self.message = Label(text='', fg='red')
  72.         self.message.grid(row=15, column=0, columnspan=2, sticky=W + E)
  73.  
  74.         # Table
  75.         # tv=Treeview(root, selectmode=BROWSE, height=8, show="tree headings", columns=("key", "value"), style="Foo2.Treeview")
  76.         #
  77.         #  Buttons
  78.         ttk.Button(text='DELETE', command=self.delete_empleado).grid( row=16,  columnspan=2, ipady=7, sticky= E)
  79.         ttk.Button(text = 'EDIT', command = self.edit_empleado).grid( row=16,  columnspan=2, ipady=7, sticky= "")
  80.         ttk.Button(text='VER TABLA', command=self.Ver).grid(row=16, columnspan=12, ipady=7, sticky="")
  81.  
  82.  
  83.         self.tree = ttk.Treeview(selectmode=BROWSE, height=5, columns=(
  84.                     "nombre", "salario"), style="Foo2.Treeview")
  85.  
  86.  
  87.         #ORGANIZO EL ESPACIO DEL WIDGT CON ...(row=100, column=0, columnspan=100)
  88.  
  89.         self.tree.grid(row=20, column=0, columnspan=20)
  90.         #self.tree.heading('#0', text='IDEMP', anchor=W)
  91.         self.tree.heading('#0', text='nombre', anchor=W)
  92.         self.tree.heading('#1', text='salario', anchor=W)
  93.  
  94.        
  95.  
  96.  
  97.         self.tree.grid(padx=28, pady=(28, 15))
  98.  
  99.  
  100.  
  101.         scrollbarV = Scrollbar(orient=VERTICAL, command=self.tree.yview)
  102.         scrollbarV.grid( row=20,  columnspan=12, ipady=40, sticky=SE) #row=22, columnspan= 1, sticky='NSEW'
  103.  
  104.         scrollH = Scrollbar(orient=HORIZONTAL,command=self.tree.xview)
  105.        
  106.         scrollH.grid(row=24, columnspan= 9, ipady=1, sticky=NSEW)  #column=25, row=0, sticky=NSEW)
  107.  
  108.         self.get_empleados()
  109.  
  110.     def run_query(self, query, parameters=()):
  111.         with conn as con:
  112.             cur = con.cursor()
  113.             result = cur.execute(query, parameters)
  114.         conn.commit()
  115.         return result
  116.  
  117.  
  118.     # Get Products from Database
  119.     def get_empleados(self):
  120.         # cleaning Table
  121.         records = self.tree.get_children()
  122.  
  123.         for element in records:
  124.             self.tree.delete(element)
  125.  
  126.         cur = conn.cursor(cursor_factory=DictCursor)
  127.         cur.execute("select * from empleado order by nombre DESC" )
  128.  
  129.         rows = cur.fetchall()
  130.  
  131.         for row in rows:
  132.            self.tree.insert('', 'end', text=row[1], values=row[2:])
  133.  
  134.  
  135.  
  136.  
  137.  
  138.     # User Input Validation
  139.     def validation(self):
  140.         self.emplea = str(self.nombre.get() and self.salario.get() )
  141.  
  142.         return len(self.emplea) != 0
  143.  
  144.  
  145.  
  146.     def add_empleado(self):
  147.         if self.validation():
  148.  
  149.             query = 'INSERT INTO empleado VALUES (default, %s,%s)'
  150.                     #,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,  \
  151.                      #                           %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
  152.             parameters = ( self.nombre.get(), self.salario.get())
  153.  
  154.  
  155.  
  156.             self.run_query(query, parameters)
  157.             self.message['text'] = 'Empleado {} Adiccionado Satisfactoriamente'.format(self.nombre.get())
  158.  
  159.             self.nombre.delete(0, END)
  160.             self.salario.delete(0, END)
  161.  
  162.  
  163.  
  164.         else:
  165.             self.message['text'] = 'Nombre and Salario son Requridos'
  166.         self.get_empleados()
  167.  
  168.     def delete_empleado(self):
  169.         #print(self.tree.item(self.tree.selection()))
  170.         self.message['text'] = ''
  171.         try:
  172.             ( self.tree.item(self.tree.selection())) ['text'][0]
  173.         except IndexError as e:
  174.             self.message['text'] = 'Please select a Record'
  175.             return
  176.         self.message['text'] = ''
  177.         self.num = self.tree.item(self.tree.selection()) ['text'] #[0]
  178.         query=("DELETE FROM empleado WHERE nombre=%s")
  179.         self.run_query(query, (self.num,))
  180.  
  181.         self.message['text'] = 'Record {} deleted Successfully'.format(self.num)
  182.         self.get_empleados()
  183.  
  184.  
  185.  
  186.     def Ver(self):
  187.         print("Estas en la Opcion Ver EMPLEADOS.... ")
  188.         print("")
  189.  
  190.         cur = conn.cursor(cursor_factory=RealDictCursor)
  191.         cur.execute("""select * from empleado order by id""")
  192.  
  193.         rows = [cur.fetchall()]
  194.  
  195.         for row in rows:
  196.             print(tabulate(row, headers="keys", tablefmt='fancy_grid', stralign='left'))
  197.  
  198.  
  199.  
  200.     def edit_empleado(self):
  201.         #print(self.tree.item(self.tree.selection()))
  202.         self.message['text'] = ''
  203.         try:
  204.             self.tree.item(self.tree.selection()) ['text'] [0]
  205.         except IndexError as e:
  206.             self.message['text'] = 'Por Favor Selecione el Empleado'
  207.             return
  208.  
  209.         nombre = self.tree.item(self.tree.selection())['text'] #[0]
  210.         salario = self.tree.item(self.tree.selection())['values'][0]
  211.         self.edit_wind = Toplevel()
  212.         self.edit_wind.title('Editar Empleados')
  213.  
  214.         # Old Tipo Documento
  215.         Label(self.edit_wind, text = 'nombre  Actual:').grid(row = 0, column = 1)
  216.         Entry(self.edit_wind, textvariable = StringVar(self.edit_wind, value = nombre), state = 'readonly').grid(row = 0, column = 2)
  217.         # New tipo documento
  218.         Label(self.edit_wind, text = 'Nuevo nombre empleado:').grid(row = 0, column = 3)
  219.         new_nombre = Entry(self.edit_wind)
  220.         new_nombre.grid(row = 0, column = 4)
  221.  
  222.         # Old numero Documento
  223.         Label(self.edit_wind, text = 'salario Actual:').grid(row = 1, column =1)
  224.         Entry(self.edit_wind, textvariable = StringVar(self.edit_wind, value = salario), state = 'readonly').grid(row = 1, column = 2)
  225.         # New numero documento
  226.         Label(self.edit_wind, text = 'Nuevo salario:').grid(row = 1, column = 3)
  227.         new_salario= Entry(self.edit_wind)
  228.         new_salario.grid(row = 1, column = 4)
  229.  
  230.         # Nuevo primer Nombre
  231.         Label(self.edit_wind, text='================').grid(row=6, column=2)
  232.  
  233.  
  234.  
  235.         Button(self.edit_wind, text='Actualizar',
  236.                command=lambda: self.edit_records(nombre=new_nombre.get(), salario=new_salario.get())).grid(row=4,
  237.                                                                                                            column=2,
  238.                                                                                                            sticky=W)
  239.         self.edit_wind.mainloop()
  240.  
  241.  
  242.     def edit_records(self, nombre, salario):
  243.                
  244.         query=("UPDATE empleado SET nombre=%s, salario=%s") #[nombre, salario])  #WHERE nombre=%s AND salario=%s")
  245.  
  246.         conn.commit()
  247.         parameters = (nombre, salario)
  248.         self.run_query(query, parameters)
  249.         self.edit_wind.destroy()
  250.         self.message['text'] = 'Empleado {} Actualizado Satisfactoriamente'.format(nombre)
  251.         self.get_empleados()
  252.  
  253.  
  254.  
  255. if __name__ == '__main__':
  256.     window = root()
  257.     application = Empleado(window)
  258.     window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement