Skip to content

Instantly share code, notes, and snippets.

@carlosmmairena
Created May 10, 2022 22:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carlosmmairena/f5b3f257ef8569aa4170a4d7f352259f to your computer and use it in GitHub Desktop.
Save carlosmmairena/f5b3f257ef8569aa4170a4d7f352259f to your computer and use it in GitHub Desktop.
import tkinter
from tkinter import CENTER, ttk
lista_matriculas = []
ventana = tkinter.Tk()
ventana.geometry('500x500')
# etiqueta de mensaje
mensaje_lbl = tkinter.Label(ventana)
mensaje_lbl.grid(row=0, column=1)
# Nombre
nombre_lbl = tkinter.Label(ventana, text='Nombre')
nombre_lbl.grid(row=1, column=0)
nombre_txt = tkinter.Entry(ventana)
nombre_txt.grid(row=1, column=1)
# Carne
carne_lbl = tkinter.Label(ventana, text='Carné')
carne_lbl.grid(row=2, column=0)
carne_txt = tkinter.Entry(ventana)
carne_txt.grid(row=2, column=1)
# Fecha Nacimmiento
fecha_nacimiento_lbl = tkinter.Label(ventana, text='Fecha de nacimiento')
fecha_nacimiento_lbl.grid(row=3, column=0)
fecha_nacimiento_txt = tkinter.Entry(ventana)
fecha_nacimiento_txt.grid(row=3, column=1)
# Promedio
prom_lbl = tkinter.Label(ventana, text='Promedio general tras anterior')
prom_lbl.grid(row=4, column=0)
prom_txt = tkinter.Entry(ventana)
prom_txt.grid(row=4, column=1)
# Creditos
creditos_lbl = tkinter.Label(ventana, text='Créditos del semestre tras anterior')
creditos_lbl.grid(row=5, column=0)
creditos_txt = tkinter.Entry(ventana)
creditos_txt.grid(row=5, column=1)
# Carrera
carrera_lbl = tkinter.Label(ventana, text='Carrera')
carrera_lbl.grid(row=6, column=0)
carrera_txt = tkinter.Entry(ventana)
carrera_txt.grid(row=6, column=1)
# Importamos la tabla
tabla = ttk.Treeview(ventana, height=10, columns=[f"#{n}" for n in range(1, 8)])
tabla.config(show='headings')
tabla.grid(row=10, column=1)
tabla.heading('#1', text='Nombre', anchor=CENTER)
tabla.heading('#2', text='Carne', anchor=CENTER)
tabla.heading('#3', text='Fecha Nacimiento', anchor=CENTER)
tabla.heading('#4', text='Promedio', anchor=CENTER)
tabla.heading('#5', text='Creditos', anchor=CENTER)
tabla.heading('#6', text='Carrera', anchor=CENTER)
tabla.heading('#7', text='Hora', anchor=CENTER)
#########################################################
def mostrar_tabla_matriculas():
end = len(lista_matriculas)
for index in range(end):
try:
tabla.delete(index + 1)
tabla.insert(parent='', index='end', iid=(index + 1), text='', values=(lista_matriculas[index]['nombre'], lista_matriculas[index]['carne'], lista_matriculas[index]['fecha'], lista_matriculas[index]['prom'], lista_matriculas[index]['creditos'], lista_matriculas[index]['carrera'], lista_matriculas[index]['hora_matricula']))
except:
tabla.insert(parent='', index='end', iid=(index + 1), text='', values=(lista_matriculas[index]['nombre'], lista_matriculas[index]['carne'], lista_matriculas[index]['fecha'], lista_matriculas[index]['prom'], lista_matriculas[index]['creditos'], lista_matriculas[index]['carrera'], lista_matriculas[index]['hora_matricula']))
def organizar_espacios_matricula():
indice_final = len(lista_matriculas)
for indice1 in range(indice_final - 1):
for indice2 in range(indice_final - indice1 - 1):
#promedio entre creditos
matricula = lista_matriculas[indice2]
matricula_siguiente = lista_matriculas[indice2 + 1]
lugar = calcular_lugar(matricula['prom'], matricula['creditos'])
lugar_siguiente = calcular_lugar(matricula_siguiente['prom'], matricula_siguiente['creditos'])
print('Calculando campo... PRIORIDAD LUGAR:', lugar)
print('Comparando con lugar_siguiente', lugar_siguiente)
if lugar > lugar_siguiente:
print('lugar > lugar_siguiente. Campo concedido a:', matricula['prom'])
elif lugar < lugar_siguiente:
print('lugar < lugar_siguiente. Campo concedido a:', matricula_siguiente['prom'])
lista_matriculas[indice2 + 1] = matricula
lista_matriculas[indice2] = matricula_siguiente
else:
if matricula['creditos'] > matricula_siguiente['creditos']:
print('credito1 > credito2. Campo concedido a:', matricula['prom'])
else:
print('credito1 < credito2. Campo concedido a:', matricula_siguiente['prom'])
lista_matriculas[indice2 + 1] = matricula
lista_matriculas[indice2] = matricula_siguiente
calcular_hora_matriculas()
#Esta funcion se invoca despues de organizar los cupos
def calcular_hora_matriculas():
hora = 8 #Esto porque las matrículas inician a las 8:00 am
minuto = 00
for matricula in lista_matriculas:
matricula['hora_matricula'] = "{}:{}".format(hora, minuto)
minuto += 15
if(minuto == 60):
hora +=1
minuto = 0
def calcular_lugar(prom, creditos):
return prom / creditos
def guardar_matricula(matricula_a_guardar : dict):
print("Guardando matricula...")
lista_matriculas.append(matricula_a_guardar)
organizar_espacios_matricula()
print(lista_matriculas)
def main():
print("Recolectando datos de matricula...")
nombre = nombre_txt.get()
carne = int(carne_txt.get())
fecha = fecha_nacimiento_txt.get()
#Promedio general de hace 2 semestres que el estudiante ya tiene conocimiento
prom = float(prom_txt.get())
#El estudiante suma personalmente los créditos que matriculó hace 2 semestres
creditos = int(creditos_txt.get())
carrera = carrera_txt.get()
hora_matricula = "8:00 am"
lista_datos = {'nombre' : nombre, 'carne' : carne, 'fecha' : fecha, 'prom' : prom, 'creditos' : creditos, 'carrera' : carrera, 'hora_matricula' : hora_matricula}
guardar_matricula(lista_datos)
mostrar_tabla_matriculas()
mensaje_lbl['text'] = '¡Matriccula guardada!'
guardar_matricula_btn = tkinter.Button(ventana, text='Guardar matrícula', command=main)
guardar_matricula_btn.grid(row=8, column=1)
if __name__ == '__main__':
ventana.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment