-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.py
160 lines (138 loc) · 5.68 KB
/
index.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
from tkinter import*
from tkinter import ttk
from tkinter import messagebox
from bson.objectid import ObjectId
import pymongo # Se importa pymongo
MONGO_HOST = "localhost" # direccion del host, en este caso local
MONGO_PUERTO = "27017" # puerto
MONGO_TIEMPO_FUERA = 1000 # Tiempo que python espera para conectarse a la base de datos
MONGO_URI = "mongodb://"+MONGO_HOST+":"+MONGO_PUERTO+"/" # Crear una URL
# Para generar una conexion a la base de datos y a la coleccion necesitamos lo siguiente
MONGO_BASEDATOS = "escuela"
MONGO_COLECCION = "alumnos"
cliente = pymongo.MongoClient(
MONGO_URI, serverSelectionTimeoutMS=MONGO_TIEMPO_FUERA) # Se crea el cliente
# me conecto a mi base de datos y obtenemos un objeto dentro de la variable
baseDatos = cliente[MONGO_BASEDATOS]
# desde dentro de la base de datos accedo a mi coleccion
coleccion = baseDatos[MONGO_COLECCION]
ID_ALUMNO = ""
def mostrarDatos():
try:
registros = tabla.get_children()
for registro in registros:
tabla.delete(registro)
for documento in coleccion.find(): # Con esto vemos todos los documentos de nuestra coleccion
# Ahora en vez de imprimir desde consola vamos a imprimir dentro de la tabla
tabla.insert(
'', 0, text=documento["_id"], values=documento["nombre"])
# print(documento["nombre"]+" "+documento["sexo"]+" "+str(documento["calificacion"]))#Esto me trae todos los registros
# cliente.server_info() # Se hace la conexion
# print("Conexion a mongo exitosa")
cliente.close() # Se cierra la conexion
except pymongo.errors.ServerSelectionTimeoutError as errorTiempo:
print("Tiempo exedido"+errorTiempo) # error de tiempo
except pymongo.errors.ConnectionFailure as errorConexion:
print("Fallo al conectarse a mongodb " +
errorConexion) # error de conexion
def crearRegistro():
# Verificamos que todos los campos esten llenos
if len(nombre.get()) != 0 and len(calificacion.get()) != 0 and len(sexo.get()) != 0:
try:
documento = {"nombre": nombre.get(
), "calificacion": calificacion.get(), "sexo": sexo.get()}
coleccion.insert(documento)
nombre.delete(0, END)
sexo.delete(0, END)
calificacion.delete(0, END)
except pymongo.errors.ConnectionFailure as error:
print(error)
else:
messagebox.showerror(message="Los campos no pueden estar vacios")
mostrarDatos()
def dobleCickTabla(event):
global ID_ALUMNO # ponemos el ID_ALUMNO como global
# le damos a ID_Alumno el id del elemento seleccionado
ID_ALUMNO = str(tabla.item(tabla.selection())["text"])
# print(ID_ALUMNO)
documento = coleccion.find({"_id": ObjectId(ID_ALUMNO)})[
0] # obtenemos el _id
# Accedemos a los datos para guardarlos
nombre.delete(0, END)
nombre.insert(0, documento["nombre"])
sexo.delete(0, END)
sexo.insert(0, documento["sexo"])
calificacion.delete(0, END)
calificacion.insert(0, documento["calificacion"])
crear["state"] = "disabled"
editar["state"] = "normal"
borrar["state"] = "normal"
def editarRegistro():
global ID_ALUMNO
# Validamos que los campos no esten vacios
if len(nombre.get()) != 0 and len(sexo.get()) != 0 and len(calificacion.get()) != 0:
try:
idBuscar = {"_id": ObjectId(ID_ALUMNO)}
nuevosValores = {"nombre": nombre.get(
), "sexo": sexo.get(), "calificacion": calificacion.get()}
coleccion.update(idBuscar, nuevosValores)
nombre.delete(0, END)
sexo.delete(0, END)
calificacion.delete(0, END)
except pymongo.errors.ConnectionFailure as error:
print(error)
else:
messagebox.showerror("Los campos no pueden estar vacios")
mostrarDatos()
crear["state"] = "normal"
editar["state"] = "disabled"
borrar["state"] = "disabled"
def borrarRegistro():
global ID_ALUMNO
try:
#Pasamos el id a buscar
idBuscar={"_id":ObjectId(ID_ALUMNO)}
coleccion.delete_one(idBuscar)
nombre.delete(0, END)
sexo.delete(0, END)
calificacion.delete(0, END)
except pymongo.errors.ConnectionFailure as error:
print(error)
mostrarDatos()
crear["state"] = "normal"
editar["state"] = "disabled"
borrar["state"] = "disabled"
ventana = Tk() # crear una ventana
tabla = ttk.Treeview(ventana, columns=2) # Creamos una tabla en forma de arbol
tabla.grid(row=1, column=0, columnspan=2) # definimos la posicion de la tabla
tabla.heading("#0", text="ID") # cabezeras
tabla.heading("#1", text="NOMBRE") # cabezeras
# Registrar el click
tabla.bind("<Double-Button-1>", dobleCickTabla)
# Entrys
# Nombre
Label(ventana, text="Nombre").grid(row=2, column=0)
nombre = Entry(ventana)
nombre.grid(row=2, column=1)
# Sexo
Label(ventana, text="Sexo").grid(row=3, column=0)
sexo = Entry(ventana)
sexo.grid(row=3, column=1)
# Calificacion
Label(ventana, text="Calificacion").grid(row=4, column=0)
calificacion = Entry(ventana)
calificacion.grid(row=4, column=1)
# Boton crear
crear = Button(ventana, text="Crear alumno",
command=crearRegistro, bg="#8aed3a", fg="black")
crear.grid(row=5, columnspan=2)
# Boton editar
editar = Button(ventana,text="Editar alumno", command=editarRegistro, bg="yellow", fg="black")
editar.grid(row=6, columnspan=2)
editar["state"] = "disable"
# Boton borrar
borrar = Button(ventana,text="Borrar alumno", command=borrarRegistro, bg="#ff0029", fg="white")
borrar.grid(row=7, columnspan=2)
borrar["state"] = "disable"
mostrarDatos()
ventana.mainloop() # ciclo principal, la ventana va a estar tomando el control del programa