-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrafico.py
87 lines (62 loc) · 2.32 KB
/
grafico.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
import matplotlib.pyplot as plt
from tkinter import messagebox as popUp
def calcularTotales():
totalGastos = {
"Comida": 0,
"Entretenimiento": 0,
"Servicios": 0,
"Ropa": 0,
"Prestamo": 0,
"Vacaciones": 0,
"Renta": 0,
"Gastos Personales": 0
}
for i in range(3, len(lines), 4):
# Si está en la linea divisora
# De los montos, el index de la categoría y el monto son:
# Categoría: lines[i - 2]
# Monto: lines[i - 1]
categoria = lines[i - 2].rstrip("\n")
"""
El valor del monto acumúlalo con el valor absoluto ya que si no, estará el menos (-) que pusimos en la lista de entrada:
Ejemplo:
Desayuno fecha
-200
A tí solo te interesa el 200, no el (-200). Ya que el gráfico no funciona con valores negativos
"""
monto = abs(float(lines[i - 1].rstrip("\n")))
# Primero, prueba si la categoría existe en el diccionario de totalGastos
try:
# Añade al diccionario totalCategorías:
# Asigna a la key de la categoría de la entrada, el valor del monto en la entrada leída además, acumula ese valor
totalGastos[categoria] += monto
except:
# Si no está, puede ser varia razones:
# 1. La entrada que recibe, es de Categoría Sueldo
# 2. La Categoría de Gasto leída, no existe en las keys del diccionario
# En cualquiera de los casos, se ignorará la línea y seguirá el bucle
pass
return totalGastos
def eliminarCeros(dict):
dictOut = {}
for x, y in dict.items():
if y != 0:
dictOut[x] = y
return dictOut
def generar():
with open("historial.txt", "r") as historial:
global lines
lines = historial.readlines()
if len(lines) == 0:
# Si el historial está vacío:
popUp.showerror(
"Error", "Debes colocar al menos una entrada para generar un gráfico"
)
return # No imprimas gráfico
dict = eliminarCeros(calcularTotales())
labels = dict.keys()
values = dict.values()
window = plt.figure()
plt.title("Gastos por Categoría")
plt.pie(values, labels=labels, autopct="%0.2f%%")
plt.show()