Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Corrección Examen - Vídeo 5 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
El último vídeo vamos a seguir o vamos a terminar de corregir el examen de la primera
00:00:00
evaluación. Por fin. Lo único que nos quedaba ya era cómo leer esos ficheros JSON y dibujarlos
00:00:18
en nuestro frame principal, en el main y guardarlos a la base de datos y ya estaría. Empezamos
00:00:29
a hacer el loadJSON.py, ese fichero de Python que yo le he llamado loadJSON. Lo primero que
00:00:42
hago es importar el tkinter as tk como siempre. Importamos todo lo que sea del tkinter, desde
00:00:52
herramientas para coger los colores o la función de mi texto para escribir el texto con el
00:01:00
formato y la fuente y el tamaño y como nosotros queramos. Mi información, el custom tkinter
00:01:07
para meter widgets que sean más actuales. Tenemos que importar en este caso porque
00:01:16
vamos a trabajar con JSON y luego el OS es por si queremos, el sistema operativo es por
00:01:24
si queremos guardar información en nuestro disco duro. Vamos a nuestro sistema operativo.
00:01:31
Menos lo del tkinter y JSON y el custom tk. Estos son los ficheros que hemos ido creando en los cuatro
00:01:39
vídeos anteriores. Aquí, como también lo que quiero es grabarlo en la base de datos, tengo que
00:01:48
importar esa clase que hemos hecho dentro del módulo de Python de base de datos. Import y le
00:02:00
hemos llamado a ver que no me acuerdo mi base de datos, pues listo. Ahí la tenemos. Ya lo
00:02:14
tenemos todo. Ahora empezamos a crearnos nuestra clase. La podemos llamar loadJSON. Recordar que
00:02:25
tenemos dos JSON, uno que eran datos, otro que eran notas, que eso se los daba yo con el examen. En
00:02:37
este caso no he heredo de nada, así que no pasamos ninguna información entre los paréntesis. Como
00:02:44
siempre, el constructor init, guión bajo, guión bajo, self y aquí lo que le voy a pasar es dónde
00:02:51
quiero dibujar esos datos que estamos leyendo. Se lo voy a pasar a una variable que se llama
00:03:04
ventana. Con esto podemos empezar a trabajar. Lo primero que hago es crear una variable colores
00:03:11
que sea de la clase colores aplicación para jugar con los mismos colores que
00:03:28
tiene nuestra aplicación. Lo que hemos estado usando en todos los vídeos anteriores.
00:03:35
¿Qué más hago? En este caso en el examen dibujábamos un frame en la ventana principal
00:03:48
y ahí dibujábamos los datos y luego abajo era la conexión con la base de datos de MySQL y era
00:04:11
donde guardábamos esos datos que habíamos leído de los ficheros JSON. Voy a hacer eso. Vamos a
00:04:20
coger un frame, vamos a crearnos una variable frame que va a ser de tipo ctkFrame para crear ese
00:04:30
frame que os digo para dentro de la ventana principal separar lo que es la parte de lectura
00:04:40
de JSON de lo que es la parte de escritura a MySQL. ¿Dónde lo quieres dibujar? Pues en
00:04:45
ventana. Ventana recordar que es una variable que le estoy pasando a esta clase que la vamos a
00:04:59
llamar desde clase ventana principal y que va a ser el main donde estamos dibujando toda la
00:05:07
información. ¿El fgColor? Pues le vamos a decir que eso va a ser igual a ser punto colores y le
00:05:16
vamos a pasar el color de cabecera para que tenga así un color similar. ¿Qué más le puedo pasar?
00:05:26
El border color y en este caso pues le digo que me lo pongas como black. ¿Qué más le puedo pasar?
00:05:45
Pues para que los frame tengan unas esquinas más redondeadas y no tengan como 90 grados,
00:05:56
que sea los frame recordar que es ese cuadro, ese contenedor, ese canvas que estoy dibujando
00:06:04
dentro del TKFrame. Entonces pues le podemos poner el corner, este radius, vamos a ponerlo a 12 por ejemplo.
00:06:14
Luego ya sabéis que todo lo podemos cambiar. Hemos puesto el fg, vamos a ponerle el background,
00:06:28
un color de background y ahí le voy a pasar pues el mismo que tiene el principal, entonces le vamos
00:06:37
a pasar self, vamos a poner esto, self.colores.getPrincipal. ¿Qué más le podemos pasar?
00:06:44
Yo creo que con esto ya nos vale y nos sobra. Luego ya vamos viendo más cosillas si es que
00:07:08
nos hace falta. ¿Qué hago ahora? Empaquetar los frame.pack, acordaros que siempre el place, el pack,
00:07:13
el grid, siempre hay que usarlo. Entonces en este caso le digo que lo complete en x, no en los dos,
00:07:21
no en ambos, no en bot, en x solo para que me respete, para que me llene ese frame, le digo,
00:07:31
le podemos meter un pack x para meter un margen interior y le puedo decir de 20 o un pack y un
00:07:38
pack y pues de 20 también. Y en este punto ya tengo dibujado ese frame donde voy a dibujar
00:07:49
la lectura de los ficheros JSON, de datos JSON y de notas JSON. ¿Entonces aquí qué le voy a
00:08:04
hacer ahora? Pues le voy a decir, si os acordáis que cuando trabajamos con el tkframe jugamos con
00:08:14
el column configure y el row configure, que es en el que decíamos cuántas columnas ibas a tener y
00:08:25
cuántas filas ibas a tener. Entonces si nosotros cogemos y tenía el frame en este caso, pues con
00:08:32
lo que yo os di en el examen, quiero recordar, o sería algo así similar a un tkframe que tendría
00:08:55
un título que sería pues cargando datos.json o algo así, teníamos que escribir el nombre del
00:09:03
fichero JSON1, el nombre del fichero JSON2, luego teníamos un botón que era cargar esos ficheros y
00:09:12
entonces nos mostraba la información en dos cajas de texto y luego teníamos otro letrero, otro laber,
00:09:19
que ponía salvando datos con otro botón que era para que me los escribiera. Creo recordar que era
00:09:24
algo así. Entonces lo que voy a decirle es, con esa imagen que os puse en el examen, pues tendría
00:09:32
un número de columnas, por ejemplo, si yo voy a poner dos cajas de texto en los que voy a leer los
00:09:42
dos JSON, en los que voy a visualizar esos dos JSON, los datos del JSON, ya son dos columnas.
00:09:49
Y luego con lo que os he dicho, había una etiqueta, una línea era una etiqueta, otra línea era
00:09:56
para escribir el primer nombre del primer fichero JSON, otra línea para
00:10:06
escribir el segundo nombre. Entonces contando esas líneas, todas las líneas que tendría mi fichero,
00:10:11
pues me salen me parece un total de 6 o 7. Entonces vamos a coger y vamos a
00:10:19
a ir haciendo el column configure y el row configure. Entonces ponemos con el
00:10:31
configure, le digo cuántas columnas va a tener, por lo que os digo, vale 2, este va a ser 0 y 1.
00:10:39
Y el tamaño, el peso que le vas a dar a cada una de esas, o sea, cómo lo va a repartir en cada
00:10:50
una de esas. En este caso, siempre lo normal es pasarle el que sea proporcional a las dos
00:10:55
columnas, que se reparta bien la información en las dos columnas. Ya tengo esto y vamos también
00:11:02
con el frame punto, el row configure. En este caso, tenemos 7 filas, 0, 1, 2, 3, 4, 5, 6 y hasta 7.
00:11:08
Y lo mismo de antes, el weight a 1. Y ya tenemos entonces como este frame que hemos
00:11:24
creado aquí arriba, todo este frame, ya lo tienes hecho, ya le tienes configurado todas las filas en
00:11:35
lo que lo has dividido y las columnas en lo que lo has dividido. En este caso, es dos columnas por
00:11:45
siete filas. Seguimos, entonces lo primero era un label, entonces es el punto, vamos a llamarle
00:11:50
título. Esto va a ser igual a que act label, porque es una etiqueta. ¿Qué es lo que le voy a decir?
00:12:03
Que lo dibuje. ¿Dónde lo voy a decir? Que lo dibuje en ventana o en frame. En este caso, el frame es el
00:12:16
que dibujo en ventana, en la ventana principal que se la estoy pasando a esta clase. Y nosotros,
00:12:23
toda la información que estoy escribiendo aquí ahora, es la que le voy a dibujar en el frame.
00:12:28
Entonces esto, lo primero que le paso es ubicación donde lo voy a dibujar. El texto, el segundo
00:12:34
parámetro. ¿Qué es lo que quiero que me aparezca aquí? Pues cargando datos json. Y luego ya es,
00:12:45
por ejemplo, la fuente. ¿Qué fuente voy a utilizar? Pues le voy a decir, pues me parece que eso también
00:12:56
os lo di en el examen. Lo supongo que serían estas. Entonces sería el diucin, tamaño, la fuente,
00:13:05
el tamaño. A 30 le podemos pasar el testColor, que este va a ser self.colores. Y le podemos pasar el de
00:13:17
el color principal. El color principal no, porque este me suena también que no era con colores,
00:13:30
era white. Lo puse todo en white. Entonces vamos a ponerle también el white para que veas que os
00:13:39
quede igual que en el examen. Y le voy a dar un ancho al width. Vamos a ponerle 450. Y como siempre cuando
00:13:48
yo escribo un widget, ¿qué es lo segundo que me falta? self.lblTítulo.grid. En este caso voy a usar el grid.
00:14:04
Le voy a decir columnSpan igual a 2. Recordad que en este frame tengo dos columnas configuradas,
00:14:16
así que le estoy diciendo, en la primera fila, la fila cero, esas dos columnas me las unes. ¿Y qué
00:14:28
consigo con eso? Que me salga centrado. Vamos a meterle un pathX que sea igual. Yo creo que en
00:14:34
este me va a dar igual. No le meto el pathX. Row igual a cero. Column igual. El column como lo
00:14:49
hemos unido tampoco me hace falta. Vamos a meterle un par y que éste sí puede estar bien para que
00:15:02
tengamos ese margen. Pero vamos, que eso tampoco es algo que te haga faltar. ColumnSpan sí y el row cero
00:15:14
también. Vale, listo, ya lo tengo. Ya tengo el primer fichero. Vamos, el primer fichero, el primer
00:15:21
widget que he cargado en el frame que he dibujado en la ventana principal. Acordaros siempre de cómo
00:15:30
va ese orden. Vamos con el segundo. En el segundo lo que os he dicho es, en la primera columna sí
00:15:36
que hay un letrero, pues que ponga fichero JSON1, por ejemplo, dos puntos me parece que eran en el
00:15:44
examen. Y luego en la otra era un text en el que vas a escribir, un text, perdón, un entry en el que
00:15:50
vas a escribir el nombre del fichero que quieres cargar. Pues venga, vamos a ello. Entonces aquí le
00:15:58
ponemos el lbl. Aquí estamos, el punto lbl JSON1 es igual a ctk. Hemos dicho que el primero es una
00:16:05
etiqueta, lbl, como antes. ¿Dónde vamos a dibujar la etiqueta? En frame, en este caso en el texto le
00:16:22
voy a pasar fichero fichero JSON1, dos puntos. El texto no me acuerdo si era así o era otra
00:16:32
cosa, pero sería algo similar, no sería un texto mucho más largo que éste. Como antes, la fuente,
00:16:48
el font,
00:16:58
pues la misma fuente,
00:17:02
el tamaño, 30, no, vamos a poner un poco más pequeño que será 20, por ejemplo, le vamos a decir
00:17:08
el testcolor, que en este caso, pues lo que decíamos antes, lo ponemos a white y ¿qué más le podemos decir?
00:17:18
El width, 450, o sea, es el tamaño, 450. Siempre en relación con el tamaño de nuestra ventana principal que
00:17:30
hemos creado en clase ventana principal, ¿vale? Siempre hacerlo en relación a eso, que luego no
00:17:44
pasaría nada porque si no puedes todo el tamaño, pero sí que a la hora de mandar a la izquierda o
00:17:50
a la derecha, ahí sí te puedes encontrar con que si no tienes bien medido, bien
00:17:57
insertados los tamaños, los width, los height, te puede dar problemas, ¿vale? Ya tengo esto y ahora
00:18:04
¿qué le voy a poner? El self.lbljson1.grid, igual que antes, todo el rato igual. Ahora, ¿cuál es la
00:18:16
diferencia? Que el row es igual a 1, ¿vale? En este caso no hay un column span porque quiero que me lo
00:18:25
hagan esa columna, así que le voy a pasar el column 0 y le decimos, le vamos a pasar el stack, el sticky es
00:18:32
igual al este, ¿vale? O sea, a la derecha, ¿vale? Y ya tendría mi primer label pidiendo, bueno, tengo
00:18:46
el label del título, el label del fichero pidiendo ese json1, ¿vale? Esto me lo voy a
00:19:02
grabar porque al final es lo mismo que antes y no tiene como mucho sentido.
00:19:11
Así, ya está, me lo he copiado, ya está, ¿vale? ¿Qué voy a hacer ahora? Pues el entry donde voy a
00:19:17
meter el nombre de ese fichero que quiero leer, ese fichero json, ¿vale? Entonces el punto,
00:19:33
aquí lo voy a llamar txt json1, es igual a ctkEntry,
00:19:42
ctkEntry, ¿vale? Como siempre, lo primero, ¿dónde lo vamos a dibujar? ¿Vale? Lo segundo,
00:19:57
la fuente, cuando escribes la fuente que te aparece y vamos a poner otra vez la misma. Esto,
00:20:11
fijaros que es súper monótono, que es todo el rato lo mismo, o sea, que si le das una vuelta seguro
00:20:21
que puedes de alguna manera optimizar todo este texto que yo estoy poniendo. Lo estoy poniendo
00:20:28
así porque es color white, no, hoy no, en este caso le vamos a poner... Yo lo escribo así para
00:20:37
que vayáis viendo paso a paso, ¿vale? Pero seguro que el texto o todo esto lo podéis optimizar. En
00:20:50
este caso, el texto lo vamos a poner del mismo... Colores, había un get, este, ¿vale? Un color de
00:20:56
fuente, ¿vale? Vale, y le podemos pasar para que estén relacionados de alguna manera el placeholder.
00:21:08
Bueno, el placeholder
00:21:24
es...
00:21:29
Vamos a ponerle el json1, ¿vale? Luego cuando lo mandemos a imprimir vais a ver cómo ese placeholder
00:21:29
es el texto que aparece como ayuda dentro de esa caja de texto, ¿vale? Entonces, bueno, pues ya sabéis
00:21:50
que aquí lo que sí es obligatorio es esto del frame, a lo mejor el ancho, si queréis meterle un
00:21:58
ancho, una altura, ¿vale? Pero ya está, sobre todo lo del frame. Vale, tenemos esto, vamos a meterle un
00:22:06
border color por hacerle más cosillas, el border color, en el border color le voy a pasar...
00:22:15
Puedo pasar el mismo color, a lo mejor, set.color, colores.get, podemos pasar el mismo color que la
00:22:28
fuente para que quede... Todo esto, como ya lo tenemos hecho, podemos hacerlo, lo ponemos ahora
00:22:44
como queráis o como yo quiera y luego ya cuando lo vea, pues lo modifico, lo hago de una forma,
00:22:52
lo hago de otra, ¿vale? Y ya está. Esto, self, colores, punto, get, color, cabecera, fuente, pues vamos a
00:23:01
meterle el... El de la cabecera era un poco más fuerte, ¿no? Este, bokeh. Pues este mismo y ya estaría. Yo creo que con
00:23:12
esto ya nos vale. Vamos a poner, como hemos puesto en todos, el width, pues en este caso 400 y yo creo
00:23:31
que con esto ya me vale y me sobra. ¿Vale? ¿Qué me queda por poner? Self, punto, txt, json1, punto, width. ¿Dónde lo voy a poner?
00:23:41
En el row1, igual que antes, ¿vale? Si os fijáis, es el row1. ¿Qué es lo que cambia? Que la columna ahora ya no es la 0,
00:23:59
ahora es la 1, ¿vale? Entonces se lo paso. Columna1, row1 y le voy a pasar un pathX para que me lo ponga bien a 10 y un pathY a 10.
00:24:10
Y vamos a situarlo, está aquí, igual, pues otra vez a la derecha. ¿Vale? Y ya tenemos nuestro... Nuestra segunda fila, ¿vale? Con sus dos
00:24:26
columnas, que es lo que queríamos. Y continuamos y todo el rato haciendo lo mismo. ¿Qué voy a hacer
00:24:46
ahora? El segundo json, pues nada, pues venga, ctrl-c, ctrl-v, ahí lo tenemos, en este caso es el fichero 2, le cambio, json2, json2...
00:24:52
La fila no es la 1, ¿cuál sería? La 2, pues ya está. La 2, la columna así en la 0, fichero json... ¿Vale? Y todo esto, pues no cambia nada.
00:25:13
Así que lo copiamos, lo pegamos y ya lo tenemos. ¿Qué hago ahora? Meter el entry, pues venga, copia y pega.
00:25:28
Esto lo que os puede pasar en un momento dado, es que de copiar y pegar, pues que a lo mejor no cambiáis la fila, o la columna, entonces se os lo va a dibujar
00:25:39
encima del otro que teníais anterior, o no cambiáis la etiqueta, entonces, ¿ves? Yo por aquí, sí, aquí sí se lo he cambiado. ¿Vale? Entonces va a actuar
00:25:49
sobre la caja de texto, si queréis leer el texto que hay en esa caja de texto, vale, cosas así os pueden pasar. Entonces hay que tener cuidado también, ya lo
00:25:58
sabéis cuando copiáis y pegáis, ¿vale? Y ir con el autoguardado, importante también, para que no se nos vaya borrando nada. Vale, ya tendríamos los dos...
00:26:07
A ver, esto sería la row 2, esto ya se me ha olvidado a mí, ¿vale? Y en la columna 1 ya tendríamos los dos cajas de texto para meter el valor, el nombre
00:26:19
de los ficheros que queremos leer, de los que queremos sacar, extraer la información. ¿Vale? Vale, ahora, tenemos los labels ctk, los txtjson, ¿vale?
00:26:30
Vamos a meter ahora los dos botones, o un botón, había un botón y luego había un... Ah, luego había las dos cajas de texto para mostrar la información, eso era, ¿vale?
00:26:52
Entonces, aquí vamos a meter ese botón, entonces vamos a meter btn, por ejemplo, cargar es igual a ctkbuton, paréntesis, donde lo queremos dibujar, como siempre, ¿vale?
00:27:12
Como siempre, en el frame, el texto que quiero que aparezca en el botón, pues le vamos a poner, cargar ficheros, fuente, ¿vale?
00:27:39
¿Veis? Es que está todo el tiempo lo mismo, ¿vale? Cuando lo estáis dibujando así es un poco rollo.
00:28:01
Dayouting, hemos ido poniendo todo a 20, pues a 20, el color del texto que va a ser ser .colores.
00:28:09
Ah, no, es el botón, entonces el botón vamos a pasarlo directamente en white, yo creo que con esto va a quedar mejor.
00:28:30
Y el command, ¿vale? El command, ¿a qué función llamamos cuando pulsemos, cuando generemos el evento un clic, cuando pulsemos en el botón?
00:28:48
Lo vamos a llamar a una función, por ejemplo, cargar datos, ¿vale? Este botón, pues como hemos estado haciendo todo el rato, hay que situarlo btn.cargar.grid
00:29:01
Hay que situarlo en el grid que hemos creado con el tkframe que hemos configurado aquí arriba, ¿vale? Entonces tienes el botón cargar, el .grid, el row.
00:29:21
En este caso, ahora estamos en la fila 3, column spam, para que me lo centre directamente, el column spam 2, las dos columnas, y el padding.
00:29:39
Vamos a meterle un padding de 10, como todo el tiempo, y ya tendríamos ese botón que va a controlar la carga de datos cuando lo pulsamos, ¿vale?
00:30:01
Vale, tenemos la función self.cargarDatos, así que vamos a crearnos por aquí abajo una función def.cargarDatos.self.pass, ¿vale?
00:30:20
Para que no me dé así ningún problema, ¿vale? Ya tendríamos bastante hecho, ¿vale? ¿Qué me falta? ¿Qué voy a hacer ahora? Pues empezar a dibujar esos datos que he estado leyendo de esos dos ficheros.
00:30:44
Para eso me hacen falta dos textboxes, dos cajas de texto para poder escribir los datos del fichero datos.json y de notas.json, ¿vale? Pues venga, vamos a ello.
00:31:04
El primero lo voy a poner, pues por ejemplo, vamos a poner self.txtDatos1 es igual a ctk, esto es un textbox, ¿vale? Como siempre, ¿dónde quiero dibujarlo?
00:31:18
Frame, tamaño, ancho, ¿qué le vamos a decir? Pues por ejemplo, 220, altura, a ver, un momentito, que me llaman.
00:31:41
Vale, perdón, altura, ¿qué le podemos decir? Pues para mostrar mejor todos los datos de esos ficheros, con 100, luego también van a salir los tiradores, los sliders para desplazarnos por el texto, ¿vale?
00:32:11
Entonces, la fuente, utilizamos la de siempre, ¿vale? Que esto, si en la ventana principal la hubiera puesto con esa fuente, desde el principio no me haría falta estar cargando todas esas fuentes todo el tiempo, ¿vale?
00:32:37
Pero bueno, voy a ir haciendo paso a paso, ¿vale? El tamaño, en este caso lo voy a pasar, pues 11, descolor, pues white, border color, white, el border, en este caso,
00:32:54
si le paso el border width, para que me dibuje ese border color, si no, no lo va a dibujar, ¿vale? El fgColor, que le vamos a poner el del fgColors.colores.get,
00:33:23
el de, me parece que habíamos metido el de las cabeceras, yo creo que hemos metido antes este, así parece como si solo fuera el marco, ¿vale? Y tuviera transparencia, ¿vale? Y ya estaría.
00:33:45
Vale, ¿qué hago ahora? Pues self adivinar, txtDatos1.grid, ¿vale? ¿Dónde quiero dibujar esto? En la column 0 de la fila, aquí estamos en la 3, pues de la fila 4, con un padding de 10, ¿vale?
00:34:03
Y ya tendríamos nuestra primera caja de texto, vamos con la segunda, pues nada, si es lo mismo, así que cojo esto, control-c, vámonos para acá, control-cmd-v, vale, he cogido el de antes,
00:34:32
esto no es lo que quiero, lo que yo quiero es esto, ¿vale? Listo, ¿qué le pongo aquí? El 2, lo dibujamos en frame, en border, aquí es la columna 1, ¿vale?
00:34:56
Y ya está, y no hay mucho más, no hay mucho más cambios, ya estaría, vale, ya tendríamos esos dos espacios donde voy a dibujar, donde voy a escribir la información de los JSON, ¿vale?
00:35:26
Pues seguimos, ¿qué más nos haría falta ahora? Ya hemos leído los JSON, pues ya lo que nos falta es guardarlo, hacer esa combinación entre la información de los dos JSON para guardarlo a nuestra base de datos de MySQL,
00:35:48
entonces, ¿qué me hace falta? Pues vamos a ponerle otra etiqueta y luego le vamos a poner otro botón, y ya tendría como mínimo hecha mi ventana en la que yo voy a poder visualizar esos datos, ¿vale?
00:36:14
Entonces, venga, vamos a ello, vamos a coger, le voy a poner un, pues no sé, vamos a llamarles lblTítulo2, por ejemplo, como vosotros queráis, el ctkLabel, porque es una etiqueta, ¿vale?
00:36:30
Lo dibujo en frame, le pongo la variable text, le paso salvando, datos, vale, la fuente, que es, tamaño de la fuente, vamos a ponerle 30,
00:36:55
vamos a pasarle el textColor, que va a ser white, vamos a ponerle un width, que es igual a 450, o sea, exactamente igual que en la etiqueta, en el label, en el título que he metido arriba del todo, ¿vale?
00:37:18
¿Qué le metemos ahora? Pues el lblTítulo2.gris, vale, y pues aquí le vamos a decir también que nos lo centre con el column span igual 2, le vamos a decir la fila donde quiero que me lo dibuje,
00:37:46
que es la 5 y un padding, un padding igual a 10, listo, ¿vale?
00:38:04
¿Y qué nos faltaría ahora? El botón, el botón para salvar, para guardar esos datos cuando lo pulsamos, ¿vale? Entonces, pues venga, vamos a por el botón, btnSalvar, es igual a ctkButton,
00:38:20
lo dibujamos en frame, el texto que le vamos a poner va a ser igual a salvarDatos, la verdad es que esto, no sé si me gusta mucho el texto este, pero bueno, no pasa nada.
00:38:45
A un tamaño, pues vamos a poner de 20, 20 puede ser mejor mucho, no lo sé, ¿vale?
00:39:16
TestColor, en el TestColor, pues como todo el rato, White, ¿vale? Esto es como queréis vosotros darle ese diseño a esa interfaz, el command, ¿vale?
00:39:24
Capturamos el evento en click, aquí vamos a llamar a una función que va a ser, pues guardarBaseDeDatos, como vosotros queráis, ¿vale?
00:39:41
btnSalvar.grid, esto en la row, 6, columnSpan para que nos lo centre, columnSpan, esto es igual a 2, nuestras dos columnas, y el path,
00:39:55
y que lo voy a poner a 10, ¿vale? Bueno, con esto vamos a crearnos, igual que he hecho antes, vamos a crearnos un def que sea guardarBaseDeDatos, ¿vale?
00:40:24
Bueno, ya tengo dibujado aquí toda la que sería mi interfaz cuando pulso sobre el botón de cargar datos.
00:40:48
Vale, entonces, esto ya lo tengo guardado, aquí me voy a venir a mi clase de ventana principal, y en loadJson, lo que vamos a decirle es, primero, que limpie,
00:41:05
que yo creo que ya lo teníamos, ¿no? Limpiar, bueno, según lo escribo lo voy a ver, primero, recordar que el botón que teníamos en la ventana principal,
00:41:19
llamaba a la función loadJson, y ese le tenía puesto con él el path, ¿vale? Porque no teníamos creado todavía el loadJson.py, vale, ahora ya lo tengo,
00:41:30
entonces, lo primero que quiero es el self.limpiar, no está, genial, pues nos hace falta una función que sea limpiar ventana, ¿vale?
00:41:42
Entonces, aquí voy a volver a dejar el path, limpiar, porque en el frame tenemos que limpiarlo, porque si no va a escribir información encima de información,
00:41:55
y eso no vais a obtener el resultado que estáis buscando, ¿vale? Entonces, lo primero que hago es limpiarlo, entonces, yo me creo una función siempre que es limpiar
00:42:09
ventana, ventana principal, ¿vale? El main que hemos creado como principal, este es el self, y a esto le voy a pasar el frame principal, ¿vale?
00:42:19
Esta, en el frame principal, es cual de esos frame que hemos creado sobre la ventana principal, es la que quiero limpiar de widget, ¿vale? Dejarla en blanco,
00:42:38
entonces, aquí le voy a decir que me coges el self, aquí lo que hago primero es un for, le digo, léeme todos los widgets que hay dentro de esa ventana principal, ¿vale?
00:42:48
Los vas cargando, uno a uno me los vas cargando en widget, y lo que hago es ir destruyéndolo, entonces, esto lo que hago es sube doble info, vale, dos puntos, entonces, vale, le digo esto,
00:43:12
me vas cogiendo todos los widgets que están cargados en el frame principal, ¿vale? Eso los vamos enumerando en la variable widget, entonces, lo que puedo hacer es widget destroy, vale, y los destruimos, vamos, los borramos, vale,
00:43:35
ahora aquí ya si, lo primero que hago es llamar a self.limpiar ventana principal, y le digo cual es el frame que quiero borrar, que es self.main,
00:43:59
vamos a verlo, ventana principal, ventana principal, las cajas, pie, pie, izquierda, izquierda, principal, self principal, vale, pues self principal,
00:44:18
ahí lo tienes, vale, esto ya nos lo va a eliminar cuando pulsamos sobre el botón, vamos a probarlo, arrancamos, aquí tenemos este, entonces, cuando yo doy a migrar datos, me lo está limpiando,
00:44:48
o sea, bien, vale, ese primer paso está bien, ahora, lo que también quiero es que me lleves a esta clase que estamos creando, esta clase que le hemos llamado loadJson,
00:45:07
lo primero que tengo que hacer es importar esa clase, vale, entonces, pues vamos a ello, a importar la clase, que es, pues, from, loadJson, import, mi base de datos, ¿no?,
00:45:22
¿cómo le llamo yo a la clase?, loadJson, vale, loadJson, vale, ya lo tengo aquí, pues aquí lo que hago es llamar a la clase que nos estamos haciendo para cargar esos datos,
00:45:40
vale, entonces, y a ese loadJson, hay que acordarse que le pasamos un fichero, vale, entonces, cuidado con un fichero, perdón, le pasamos la ventana, el frame,
00:46:02
donde queremos que se dibuje, entonces, aquí habrá que pasarle el self.principal, vale, recordar, en el loadJson, en el loadJson, le pasamos ese frame donde queremos dibujar,
00:46:24
que es luego donde hacemos otro frame, en el que ya hemos configurado las filas, las columnas, todo el rollo, vale, entonces, estamos con esto, vale, en principio vamos a ver que nos hace,
00:46:42
bueno, recordar también, yo aquí no tengo creada, creamos la base de datos y tal, pero en este ordenador donde grabo estos vídeos no tengo el, os lo diré, no tengo la base de datos,
00:47:02
no tengo el, no uso el docker, vale, entonces, solo os pongo el código que os va a funcionar, lo probáis, vale, y si no cualquier cosa me lo decís, en el loadJson, tal, no se que, vale,
00:47:22
nos vamos a nuestro principal, lo ejecutamos, tenemos nuestra ventana, yo cuando le doy a cargar los datos, veis, ya nos sale, esto creo que os lo pedía así, vale, entonces, tenemos una fila, dos filas, tres filas, cuatro, cinco, seis, siete, vale,
00:47:36
que es lo que habíamos dicho, tenemos dos columnas, sé que tengo dos columnas porque en la misma fila veis que puedo meter, pues eso, un campo de texto, un campo de texto, un label, un campo de texto, vale, una caja de texto, un campo de texto, un text o un textbox, vale, el column span aquí cuando los he usado ves que ya automáticamente me está centrando los objetos,
00:47:58
y esto es lo que veníamos buscando, vale, aquí escribiría el nombre de los Json y cuando le doy a cargar fichero, aquí ahora no me hace nada porque no lo hemos terminado, vale, pero ya por lo menos la interfaz la tenemos, que no es poco, vale, y nuestra interfaz con este que ya lo hicimos en otro vídeo, vale, pues seguimos con loadJson,
00:48:25
nuestra interfaz en el INI ya lo tenemos, yo en el INI tampoco soy muy amigo de hacer todo esto, vale, esto lo haría en una función aparte, yo lo único que haría aquí es cargar las variables, los valores en las variables, es un constructor, entonces, a mí hacer esto aquí, bueno, yo lo hago porque os lo voy explicando, pero es una barbaridad un poco, vale, bueno, tenemos las funciones de cargar datos y de guardar envase de datos,
00:48:53
pues vamos con cargar datos, vale, entonces, cargar datos, vamos a poner, vale, lo primero que le voy a decir es voy a trabajar con el sistema operativo para que me busque esos ficheros que quiero cargar, entonces, por ejemplo, vamos a meter datosPath,
00:49:22
este es igual a os.path, que para eso lo hemos cargado, vale, para que nos abra la típica ventana, dearName, la típica ventana para buscar el navegador de archivos del sistema, vale, vale, y, pues para ver si nos lo hace bien, vamos a poner un print,
00:49:47
y le vamos a decir que nos dé la ruta de ese archivo, de ese JSON, en este caso, que quiero cargar, vale, y ahora ya le paso el width, open, con el fichero que hemos abierto, le tenéis que ir haciendo, dibujando la ruta, vale,
00:50:12
excel.txtJSON, el nombre del fichero que hemos escrito nosotros, vale, aquí lo que estoy es escribiendo esa ruta, vale, y este tipo de variables, acordaros que para coger el valor que hemos escrito en las cajas de texto, es con el get, acordaros de eso, vale,
00:50:42
as, datos1, vale, pues ya está, me lees todo lo que hay en ese fichero, como datos1, tengo toda la información guardada en datos1, vale, entonces, lo que hago es,
00:51:09
aquí va a ser igual a json.load, datos1, esto es, vale, entonces, lo primero que hago es, coger ese fichero y lo meto en datos1, y luego, como es un JSON, lo voy a cargar en la variable misDatos, como datos con el json.load, vale,
00:51:40
acordaros de como trabajábamos con los JSON, entonces, que para leer JSON, usamos el load, siempre, vale, para leer los ficheros que hay en un JSON, usamos el load, vale, vale,
00:52:07
vale, que más voy a hacer ahora, leer el segundo fichero, porque son dos, ahí, vamos a ver, este aquí, vale, en este caso, pues dos, dos, aquí vamos a ponerle,
00:52:25
dos, misDatos, vamos a ponerle aquí un dos, para que sean las variables diferentes, y ya estaría, vale, ya tengo cargados en las variables, misDatos-text y misDatos2-text,
00:52:53
tengo cargados esos datos de esos dos ficheros JSON, vale, listo, vale, que hago ahora, podemos ir escribiendo en las dos textbox, ctcap textbox, que hemos creado antes,
00:53:15
en la interfaz, escribir estos datos, pues venga, entonces, aquí le voy a poner, for, como siempre, for e-inself.misDatos-text, vale, y le voy a pedir por, como son JSON,
00:53:43
que es lo que le vas a decir, le paso la clave por la que quiero ir leyendo, o sea, fijaros como era este, en este caso es datos, tienes usuario, la colección de datos, y recordar que como es un JSON,
00:54:10
tenemos clave, valor, clave, valor, clave, valor, vale, entonces, yo lo primero que le digo, es, de esos ficheros JSON que hemos cargado en una variable de Python, me vas a traer, o vamos a leer, los de la colección usuario, vale,
00:54:27
con un for each, vale, entonces aquí yo tengo línea, es igual, una variable que yo le llamo línea, entonces le digo que campos quiero que me escribas, pues el username, vale, el username, el email, el password, vale, y me va a ir escribiendo todos los datos,
00:54:52
esto lo tenemos en loadJSON, entonces le digo, quiero el username, vale, más, vamos a pasar, vale, vamos a ver, para esto un momento, pausa, vale, entonces vamos a ir creando, ese string que vamos a ir dibujando en los textbox,
00:55:18
email,
00:55:49
email, vale, bueno, pues en principio le podemos pasar aquí el password,
00:55:55
y salto de carro, vale, y esto me dibuja la línea, y ahora lo que le digo es que el cell en txt datos1.insert, me vas a insertar esa línea,
00:56:25
y ya está, insert, siempre debajo, y línea, vale, me vas a insertar esa línea, el insert es justo a continuación, vale, pues justo a continuación como tiene un salto de carro lo va a poner justo debajo, vale, podemos decirle que no el inserte al final,
00:56:49
al principio, hoy hay diferentes parámetros para jugar con este insert, vale, pues con eso lo que escribo es ese primer JSON que le hemos dicho a nuestra aplicación, vale, y ahora pues hacemos lo mismo con el segundo,
00:57:11
copio, pego, este product, este product, aquí va a ser mis datos2, aquí si nos fijamos en las notas, pues será un campo, supongo que serán notas, notas y notas, notas, nombres, módulos y dentro de los módulos esto, vale,
00:57:37
entonces ese es un poco más complejo porque es colecciones y luego dentro hay otra colección, un poquitillo más complejo pero vamos que tampoco tiene nada, vale, entonces le vamos a meter ahí el datos2, aquí notas, notas, vale, entonces aquí le vamos a decir,
00:58:02
vamos a decirle línea1, va a ser igual a, me quedo sin batería, un momentito, vale, línea1, entonces le decimos aquí quiero que me pongas el username, el nombre,
00:58:33
esto era por, a ver, enséñamelo otra vez, notas, es notas, que ya lo hemos pasado, luego tengo el nombre y los módulos, vale, tengo el nombre del módulo, nota1 y nota2, vale, entonces lo vamos a poner aquí como,
00:59:00
nombre, más, vamos a poner dos puntos, más, vale, vale, que aparezca el nombre, vale, esto lo voy a insertar en el,
00:59:16
en el fichero2, o sea, set.txt, .insert, igual que antes insert, le vamos a pasar, línea1, que es donde estamos,
00:59:46
vale, en este caso lo único que estoy haciendo es, me vais sacando estos nombres, vale, Juan Pablo, Luis Miguel, Sofía, Lucas, Aarón, vale, vale, ahora tenemos otra colección, una colección dentro de otra,
01:00:16
entonces que me va a hacer falta, pues meter otro, for, j, vale, in, in, en este caso como le he llamado a esa colección, módulos, pues venga, módulos, vale, exactamente igual,
01:00:34
es todo el rato haciendo lo mismo, vale, pues ahí ahora en línea2, le puedo decir, por ejemplo, línea2, como vosotros queráis, esto va a ser igual a j, y aquí le voy a decir,
01:00:54
nombre módulo, más, este por aquí, más, j, nota1 ahora, nota1, más, vale,
01:01:19
más, aquí le paso str, le voy a convertir a string, porque notas j son, tenemos valores integer, vale, entonces le vamos a pasar a convertir a string ese valor, entonces esto es j,
01:01:49
no, esto, esto es str, y aquí también, claro, porque nota1 también es un valor numérico, entonces exactamente por lo mismo, aquí nota2, nota2, vale, y más, vamos a meterle,
01:02:20
el salto del carro, el salto del carro, vale, y que me quedaría insertar esa línea en el texto, entonces el punto txt, datos2, punto insert, igual que aquí arriba, vale, insert,
01:02:44
le pasamos el insert, y le pasamos línea2, uy, línea2, vale, bueno, yo creo que con esto ya me tendría que dibujar todo, vamos a verlo, vamos a coger, vamos a venirnos al principal,
01:03:06
vamos a venirnos aquí, vale, le doy migración de datos, esto ya habíamos visto que nos lo hacía bien, vale, cargar ficheros, no encuentra nada porque no hay ningún fichero ahora mismo,
01:03:25
entonces vamos a decirle, por un lado aquí es datos.json, y aquí era notas.json, cargar ficheros, y ya tenemos nuestro fichero, vale, con el tirador que os estaba diciendo, vale,
01:03:41
y ya el último paso que me faltaría sería cargar esta información en la base de datos, y ya lo tenéis hecho todo aquí y aquí, vale, o sea, ya tengo hecho todo, leído, sacado, extraído la información de los json,
01:04:04
y los tengo en estos dos widgets, que ya me va a facilitar en cierto modo el trabajo, vale, ya tienes Lucas, ya tienes Sofía, ya tienes los nombres, podríamos ya directamente ir uno a uno, ir poniéndolos, vale,
01:04:23
vale, entonces me faltaría el hacer este botón, y este es fácil, este informe de estas notas.json, vale, aquí lo que le voy a decir es primero vamos a importar esa base que ya la teníamos, vale, entonces,
01:04:39
que le voy a decir, pues, mi base de datos es igual a mi btd, como puse yo esto, self, punto, así es que esto, lo único que tengo que hacer es mis datos,
01:04:58
a recordar que esto ya lo tengo, ya lo he ido escribiendo aquí, entonces, con que le pase mis datos, text, y self, punto, mis datos, dos, guión, bajo, text,
01:05:21
con esto nos va a funcionar, aquí, self, se me había olvidado, la base de datos, que es la que os digo que no tengo el docker, vale, recibe esos datos uno y datos dos, ya los tienes aquí, vale,
01:05:42
hacemos la conexión, creamos la diferente base de datos, y en guardar datos, guardar datos no lo tengo creado aquí, entonces vamos con él, aquí lo único que hicimos fue crear las tablas, la base de datos,
01:05:58
pero no guardé los datos, pues vamos a ver como guardaríamos esos datos en esa función, entonces, aquí vamos a quitar este pass y sería, por ejemplo, para usar esa línea donde voy a construir esos datos,
01:06:19
vale, y luego ya son dos ficheros de datos, son dos ficheros, dos colecciones de datos, entonces, pues un for, para recorrerlo todo, vale, for, j, in, self, datos uno, por ejemplo,
01:06:36
y datos uno, sigue siendo un j, entonces, le tienes que decir la colección sobre la que quieres trabajar, entonces, usuario, igual que hemos visto antes, y voy creándome, igual que antes,
01:06:53
esa línea que luego es la que le voy a pasar a través del cursor execute, ese comando, vale, a la base de datos es la que voy a guardar, entonces, ¿qué le voy a poner en la línea?
01:07:11
Pues, en este caso, va a ser el insert, dentro de datos migrados dos, lo escribiría esto, datos migrados crear, examen datos, aquí está, datos migrados dos, vale, acordaros de eso,
01:07:21
valores, y vamos a ir construyendo esa sentencia, aquí suele haber, siempre os suele dar jaleo, vale, pero es por hacer el string, yo lo que os diría es que hicierais un printlínea,
01:07:45
porque luego siempre se nos olvida alguna coma, alguna comilla, algún paréntesis, yo que sé, cosas de ese tipo, vale, vamos, aparte de eso, poca cosa más, el username,
01:08:03
más, seguimos construyendo nuestra cadena, jugar con la comilla simple y las doble comillas, pues ya sabéis que a veces tenemos que hacer eso, vale, cuando queremos construir
01:08:20
esa sentencia, que vamos a mandar al JSQL, aquí le vamos a poner, el username, el email, le vamos a poner otra vez, el más, ese sería otro campo, coma, vale, otro más,
01:08:39
que sería el password, vale, y ese serían los datos que tenemos en datos1, vale, esa colección de datos que le hemos pasado en datos1, vale,
01:09:03
desde el load.json, save my data.txt, recordar, save my data.txt, es ese json que he ido cargando, vale, vale, ya tengo hecho esto, pues ahora le voy a hacer otro for, porque tengo el segundo fichero,
01:09:28
y también hay que leerlo, vale, incel.datos2, y aquí ya si tenéis también varias formas de trabajar, en este caso le voy a decir que quiero notas, quiero leer, quiero trabajar sobre la colección de notas,
01:09:49
y preguntar si znombre, vale, voy leyendo, es igual a jusername, vale, entonces que es lo que quiero que me haga,
01:10:10
entonces me hace esa línea que le voy a pasar a mysql, pues ya está, como he hecho antes, for in z, la colección sería módulos, vale, o sea, ha encontrado los mismos nombres,
01:10:40
el username y el nombre de la segunda colección, vale, acordaros que eran las notas, pues si encuentra concordancia, lo que vamos a leer es esa nota1, esa nota2 y el nombre del módulo, vale,
01:11:01
entonces le estoy diciendo, me lees de esa segunda colección de datos que te he mandado, de ese segundo json que te he mandado, de la colección de módulos,
01:11:17
me vas a hacer que la línea sea igual a lo que habíamos escrito antes, más, voy a dibujar, paréntesis, aquí más, y el nombre del módulo,
01:11:27
módulo, nombre, módulo, más, vale, más, nota1, que es como es numérico, también lo tengo que pasar a string, str, str, tr,
01:11:48
paréntesis, más, aquí, aquí, vale, más, lo mismo, str, y nota2, nota2, vale, con lo que esto termino, paréntesis, vale, str,
01:12:18
más el salto de carro, vale, no, el salto de carro no, aquí no hay salto de carro, aquí lo que sería es, estamos haciendo la sentencia del SQL, entonces,
01:12:46
termino los valores, vale, es un insert into, entonces estos serían los valores, ya lo tendríamos, esto no está muy bien, porque habría que cerrar esas comillas,
01:13:03
lo que decía antes, vale, estas comillas de aquí habría que cerrarlas, pues a mí aquí ya me había colado, vale, pero vale, ya estaría, para ver que todo está bien,
01:13:16
un poco lo que os decía antes, vale, yo lo que os aconsejaría es, hacer un print de esta línea que acabamos de crear, para ver que esa sentencia de SQL está bien escrita,
01:13:29
vale, una vez que ya me cerció lo de que está bien, entonces, que voy a hacer, pues cursor, acordaros que cursor era la variable que creábamos cuando hacíamos la conexión
01:13:43
con la base de datos, le metía el execute, con el execute le digo, primero que uses la base de datos que hemos creado, examenDAM, punto y coma, vale,
01:13:55
esa sería la primera sentencia, la segunda, ser.cursor.execute, ahora, lo que le voy a pasar es línea, esta línea que acabamos de crear con esa sentencia del insert into, vale,
01:14:12
ya está, línea, y por último, como es un cambio que estamos haciendo en la base de datos, hay que pasarle siempre, esto no es así, esto es conexión, conexión, punto y el commit,
01:14:29
que no se os olvide el commit, vale, cada vez que hacemos un cambio en la base de datos, siempre para actualizarla, el commit, y línea es igual a la limpia, vale,
01:14:51
y por último, que más le voy a hacer a esto, pues, self.cursor.close, vale, recordar esto siempre, cerrarlo, que es una buena práctica, self.conexión, cierro la conexión con la base de datos,
01:15:08
cada vez que llame a esta clase me la va a abrir, entonces, pues, no la dejo abierta, vale, que me puede dar problemas, esto sería la función para guardar los datos, en la que hemos recibido las dos colecciones de datos,
01:15:30
con dos for, hemos ido uniendo los diferentes campos de esos datos que no eran más que ficheros, la carga de esos ficheros, el load de esos ficheros json, y ya estaría el examen hecho,
01:15:43
bueno, cualquier cosa, si no sale o no entendéis, me lo decís, un saludo, chao, hasta luego.
01:15:59
- Autor/es:
- Mario Santos
- Subido por:
- Mario S.
- Licencia:
- Dominio público
- Visualizaciones:
- 42
- Fecha:
- 28 de enero de 2024 - 0:02
- Visibilidad:
- Público
- Centro:
- IES VILLABLANCA
- Duración:
- 1h′ 16′ 15″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.76