📊 Python Interfaces Gráficas: Aplicación de escritorio con [ TKINTER y SQLite3 ]
Vložit
- čas přidán 9. 07. 2024
- ¿Quieres hacer una Interfaz gráfica con Python usando Tkinter y SQLite3? Te enseño haciendo una aplicación de escritorio paso a paso, con múltiples ventanas y programación orientada a objetos.
👉En este proyecto de Python, usaremos tkinter para crear una interfaz gráfica con múltiples ventanas. También utilizaremos SQLite3 con Python y SQLAlchemy para crear una base de datos relacional y guardar todos los datos de los tests.
👉SQLAlchemy es un ORM (Object Relational Mapping) que nos permite definir los modelos de la base de datos mediante programación orientada a objetos. SQLAlchemy es una especie de puente entre Python y SQLite que nos permite deshacernos del lenguaje SQL y trabajar directamente con objetos, atributos y métodos de Python.
👉Veremos cómo utilizar y personalizar varios widgets de tkinter. Utilizaremos Frames para crear las pantallas. Utilizaremos la programación orientada a objetos de python para crear la estructura de nuestro proyecto y generar código reciclable.
👉La aplicación de escritorio nos permitirá crear diferentes tests o exámenes con preguntas con múltiples opciones para seleccionar. Podremos tanto ejecutar los tests y obtener la puntuación como crear otros completamente de cero o incluso eliminarlos.
👉 Código del proyecto: github.com/dimas-avila/tkinte...
🎬 TIMESTAMPS:
00:00 - Introducción al proyecto de tkinter y sqlite3
00:12 - Demostración de la aplicación de escritorio de tkinter
04:00 - Explicación teórica. Diseño de la aplicación y estructura de la base de datos
20:52 - Creación del proyecto. Estructura de ficheros y módulos de Python
23:29 - Creación de los modelos de la base de datos con SQLite y SQLAlchemy
43:35 - Insertar datos en una tabla de SQLite
56:53 - Creación de la clase manager de la interfaz gráfica
01:10:13 - Creación de la pantalla Home con tkinter
01:27:00 - Menú de navegación en tkinter para cambiar de pantalla.
01:35:45 - Controlador de la base de datos con SQLAlchemy
01:37:56 - Insertar datos a una tabla sql con SQLAlchemy
01:44:00 - Pantalla de tkinter para añadir nuevos tests a la base de datos
02:04:48 - Menú desplegable de tkinter "OptionMenu"
03:58:40 - Resumen final y explicación paso a paso - Věda a technologie
⚠️ Nunca os lo pido, pero por favor apoyad el vídeo todo lo que podáis, fue un trabajazo. Links IMPORTANTES:
⚠️Proyecto de Tkinter: czcams.com/video/_LiX8Bd2Jq0/video.html
⚠️Tutorial SQLite3: czcams.com/video/uB0928SOTEQ/video.html
⚠️ Tutorial básico de TKINTER: czcams.com/video/MpkTYMzhV0A/video.html
⚠️Código del proyecto: github.com/dimas-avila/tkinter_sqlite
Realmente me sorprende mas conseguir un Tocayo que tambien programe!
Despues de hacer maravillas con reflex, quise aprender mas deTinker y me topo con esta Joya!
PD: eres el segundo Dimas que me topo en la vida y que a demas es programador!
se que si se busca el nombre salen miles, pero que de verdad me tope por casulaidad 2
Dimas sos buenisimo bro, habia dejado de ver los videos porque estaba de examenes pero ya volvemos, una maraton de dimas por semana santa
Hola Jesus! Muchas gracias, espero que hayan ido genial los exámenes. Yo ahora empiezo los finales en un par de semanas jajajajaa
Eres un fiera!! mil gracias, sigue creando tan buen contenido!
Muchas gracias Daniel! Aquí seguiremos mientras me hagáis un poco de caso jajajaja
Bro, amo tus videos, de verdad muchísimas gracias por enseñar así!! 🎉❤️
Gracias a ti por comentar y por valorarlos!
aprendo mucho contigo dimas, gracias a ti pude repasar python, eres el mejor !
Ooooleee que bieeen! Muchísimas gracias 😊
ACADEMIA DIMAS YAAAAAA!!!!
Este canal es la academia Dimas jajaajja
Te luciste Dimas! Muchas gracias por compartir semejante proyecto!
Gracias a ti por apreciarlo! Espero que te guste 🙌🙌
Excelente Dimas!!! Te quedó épico!
Muchas gracias carlos ☺️☺️
Mejor imposible. *GRACIAS* 👍
De nada Henry, me alegra que te guste ! 😎🤟
Gran tutorial bro. Explicas muy bien todo, me ha quedado claro. Soy nuevo en python y lo he entendido muy bien
Ole ole que alegría leer esto! Bienvenido al mundillo!
Aupa Dimas, te explicas a la perfección. Te auguro >50000 subs para 2023
Muchas gracias! Ojalá aciertes tu predicción jajajajs, aunque lo veo muy lejos de momento
Buenísimo Dimas eres el mejor!!!
Muchas gracias mireia 💜
Super Genio!!!...gracias por el trabajo!, yo ya estoy haciendo lo posible para difundirte!.Saludos dsd Argentina.
Muchas gracias por la difusión Diego, ayuda mucho 😊. Me alegra que te guste el contenido!
Justo estoy empezando en Python, ya que me he interesado por la programación (he estado previamente usando VBA) y tengo que darte la enhorabuena como profesor, un autentico novato como yo y te he entendido 95% de todo lo que has hecho. Suscrito y atento a todos tus videos.
Hola Jose Antonio! Bienvenido al canal 😊. Pues este vídeo era complicadillo, enhorabona por poderlo seguir 💪. Muchas gracias por tus palabras
@@Dimasmas Has sido un gran descubrimiento, te animo mucho a seguir haciendo contenido de esta calidad, y sigas dándonos "la turra" como dices a veces jejejeje que nosotros las escucharemos con gusto, un saludo. =)
Gracias Dimas quiero aprender GUI con POO saludos desde Venezuela
Pues seguro que este vídeo te viene de perlas!
Excelente
Muchas gracias Walter, me alegra que te haya gustado
POR FIIIIIIIN!!!!!!! ahora a pulirse el video hasta que me sangren los dedos de teclear, te respondo cuanto me lo termine. Muchisimas gracias y un abrazo Dimas
Hola Hironimo! Espero que te guste el vídeo! No hay un login como tal, pero sí que hacemos algo bastante similar ☺️. Ya me dirás qué te ha parecido!
@@Dimasmas pedazo de seminario te has marcado, madre de Dios... Esto se merece un señor Mail con comentario cuando me lo vea un par de veces... OMG, UN NUEVO DOCTOR HA APARECIDO EN NUESTRAS PANTALLAS
@@bisonte516 Si te lo quieres ver un par de veces tienes bastante trabajo por delante jajajaja, ya me contarás!
Llegaste a las 10.941 visualizaciones, así que tenes que seguir haciendo videos de python y no de minecraft jajaja gracias Dimas por estos videos, me vienen impecables para un proyecto grande que ando intentando hacer.
Tendría que haber elegido minecraft des del principio
Excelente tutorial de 4 horas Dimas! Me han ocurrido algunos errores durante la ejecución de la app pero los he solucionado dándole bastantes vueltas a los archivos del proyecto, muy probablemente en el proceso se me hayan quemado unas 7 neuronas jajaja
Es un tutorial denso y con unos cuantos ficheros, si solo has perdido 7 neuronas es todo un logro jajajaja. Muchas gracias por verlo Andy!
Buenas Dimas, mi target en este momento es aprender a hacer interfaces gráficas con POO a si que me viene el video de locos. Mil gracias!
Pues este vídeo te vendrá geniaal! Ya me contarás qué te ha parecido ☺️
Buenos días! Impresionante el tutorial, se entiende a la perfección.
Tengo una duda en cuanto a configuración de interfaz de visual studio code. En las llamadas externas a métodos de una clase, como por ejemplo la llamada en "self.option_list = self.manager.get_test_names()" dentro de la clase "UpdateTestScreen", VSCode no me reconoce la función get_test_names(), no me da información al situarme sobre ella.
Existe alguna forma de configurar esto? En tu vídeo sí que te cambia de color reconociéndotela.
Muchas gracias de antemano
Un saludo,
Jesús
Como se llama la extensión de py en la cual se ve la identacion de una lista, tupla o cualquier elemento contenedor con una línea a la izquierda que recubre el rango de parámetros?
Hola, como estan? Ya termine de crear los models de las bases de datos, pero me sale este error: Can't load plugin: sqlalchemy.dialects:sqlite3. Me podrian explicar que paso?
buenas dimas estoy comenzando en esto estaba siguiendo tu tutorial y me el siguiente error TypeError: 'questions' is an invalid keyword argument for Test no he encontrado como resolverlo gracias por su ayuda
Grande dimas Grande!!! Acabo de terminar el Tuto!! Increíble! Gracias , gracias por tu contenido, lo diré las veces que haga falta!! tu video de 4 h me lo he comido en 42 horitas!! buffff fuerte aventuraaa!!! ahora lo voy ha intentar laplicar el concepto alguna idea que tengo por ahí en programas de consola sin interfaz!! Que emoción!
Lo único que una pregunta ¿ en una base de datos Sqlite, se pueden guardar otro tipo de datos que no sea STR INT o BOOL? me refiero ha listas, diccionarios, conjuntos, tuplas....
pd: El catalán es hermoso... pots parlar si vols... !!! no se mucho , de hecho no se decir mas que eso! xD pero si me tengo que adaptar me adapto tu como mas comodo te sientas jajjajaja :P!
Ahora lo importante es que apliques lo aprendido en tus propios proyectos!
En SQLite hay un tipo de dato que es el BLOB, se usa para guardar ficheros grandes. Para guardar listas o conjuntos no hay un tipo de datos. Lo que puedes hacer es serializarlo, usando por ejemplo formato json. De eso creo que sí hablo en los vídeos de Flask, es un poco largo para explicarlo en un comentario.
Buenas Dimas, me salen esto Import "sqlalchemy" could not be resolved from source en todas las lineas de codigo referentes a sqlalchemy, llevo ya 3 horas intentando resolver y no he encontrado solucion, ya las 2 neuronas que me quedaban se quemaron.
Hey crack! aun estoy por aquí, buenísimo el video de verdad! , no se un like se me queda corto!Te mereces un, no se , un... gramy de la programación!,.Mira voy por las 2:35:31 y justo dices que si tenemos alguna duda que te la dejemos por aquí. Pues padre, básicamente muchas de las dudas que he tenido y tenia de antes de conocerte las has ido respondiendo a lo largo del video y es que no te haces una ligera idea de cuanto te lo agradezco, de verdad. Pero hay una cosa que no se si ya tienes otro video donde hablas mas de esto : en el script del Controller los comandos que usas para interactuar con la DB donde se usan los "query" no me quedan muy claro , entiendo que son comandos del sqlalchemy. Al principio si no recuerdo mal dijiste que en los videos de flask hablas de esta librería, la pregunta es si precisamente esta parte de los comandos por ejemplo "query().with_entities" o "query(Test).filter" (que por ejemplo ahí no me queda claro porque en uno le pasas Test y al otro no...entre otras cosas...) pero bueno voy al grano, que me lio, la duda es si en estos videos de flask profundizas acerca de estos comandos o conceptos ?, porque si es así, mañana o pasado voy directiito a los videos de flask, porque antes que estar buscando otros que expliquen esto te prefiero a ti . Pero si no para buscar info acerca de esto porque me parece muy interesante y necesario, ya que bueno, el rollo es que el tiempo es oro, e invierto mucho tiempo en aprender a programar, y muchas veces he perdido mucho tiempo en personas que alfinal pues bueno te dejan con el caramelo en la boca...(tú no , al contrario,por esto mismo estoy tan motivado contigo, porque no te dejas ni un detalle sin explicar!)pero para asegurarme de que estas dudas seran resultas ahí, ya que a mi me gustaría centrarme ahora mismo en desarrollo offline y cuando domine el rollo de crear app de escritorios en condiciones pues me quiero poner con el desarrollo web (y entonces ahí es cuando tengo pensado ver todos tus videos de web(flask, javascript), porque aun me quedan muchos videos tuyos que ver de python, como por ejemplo pegarme un repaso de las POO contigo que seguro me vas a venir fenomenal!)y claro como me gusta tontear con todo pues ya le e dado un poco de caña al django y si ahora me meto con flask me voy hacer la picha un lio, pero si tu me aseguras que en los videos de flask le das bastante caña a estas cosas que de alguna manera en estos videos no profundizas tanto( lo cual no te lo critico, es lógico porque no puedes abarcar todo , bastante abarcas ya...) pues voy de cajón aventurarme con el flask antes que con otros videos, y bueno esa es la duda... lo siento por la parrafada tío... perdón.... jejeje... X'D,(es que no quería quedar como un prepotente o algo así... ) y por ultimo bueno , me gustaría promocionarte de algún modo, por poco que sea, tampoco soy aquí influencer , pero, me gustaría contribuir aunque sea simbólicamente ha que sigas haciendo este contenido porque es ORO! pero no te encuentro por otras redes sociales ni nada... Entonces si das alguna idea de que podemos hacer por ti, aparte de fundirte a likes y comentarios para que te suban los algoritmos , por mi encantado eh!
Hola Dani, muchas gracias por tus palabras. Me alegra verte tan activo. En cuanto a tu duda:
En los vídeos de Flask utilizamos una librería que es flask-sqlalchemy, que es como sqlalchemy pero adaptado a flask. Para entender las preguntas concretas que me has hecho no te los recomiendo, ya que la interacción con la base de datos es ligeramente diferente y no entro a un nivel de detalle muy profundo.
En cuanto a la pregunta concreta:
- session.query(Test) -> la sesión es el objeto que representa la comunicación entre nuestra aplicación de tkinter y la base de datos. El método query, respresenta de alguna manera una instrucción SELECT de sql. Es decir, vamos a leer datos. Le pasamos Test porque es el modelo del cual queremos obtener información (el modelo test, representa una tabla de sql).
Si por ejemplo usamos filter() esto representa una instrucción WHERE, es decir, vamos a indicar la condición que deben cumplir los datos que queremos leer.
En este caso, para poder filtrar diferentes Tests, la query debe saber qué tabla leer, por ello es necesario usar query(Test).
- session.query().with_entities(Test.name) -> En este caso, no queremos toda la información sobre un Test, sino todos los nombres que haya guardado en la tabla test. Fíjate que este método retorna solo tuplas con los nombres, no objetos de la clase Test.
SQLAlchemy es muy extenso, yo personalmente no lo conozco en profundiad, sino que voy aprendiendo a usarlo a medida que necesito ciertas funcionalidades.
En cuanto a promocionarme: No tengo redes del canal, de hecho solo uso Instagram a nivel personal. No obstante, puedes compartir los vídeos por twitter, insta o la red social que quieras si te apetece darme visibilidad. Pero con que participes en el canal y lo recomiendes a tus conocidos que estén en el mundo de la programación es más que suficiente. Muchas gracias!
@@Dimasmas grande! Compradre grande! . Me ha quedado un poco mas claro muchas gracias , pero necesito ahondar mas , pero me lo has enfocado muy bien!! . Por otro lado , ojala tuviera conocidos cercanos que le gustara esto!!!. Pero te compartiré desde mi ig por si acaso tenga alguien por ahí que le mole el rollo .!!!
Espero poder encontrar la solución. Al intentar usar hacer un test modificar un test y eliminar un test. Yo entiendo que el problema es la lista desplegable. Me dice esto add _tkinter.TclError unknown option "-Label"
Hola dimas! consulta: porque al momento de hacer el addtestscreen para validar la entrada de texto del test_name usas un tk.entry y no le das el valor de text variable y despues usas un .get() y en cambio en la updatetestscreen lo haces dandole el valor de cada variable como atributo y despues se las asignas con un textvariable???? no se si se entiende la consulta pero la dejo porque no entendi esa parte saludos!!!
Hola facundo! Me podrías indicar el minuto del vídeo (más o menos) al que te refieres? Así puedo darte una respuesta más precisa
@@Dimasmas si obvio, 1:52:12 borras el atributo self.test_name = tk.StringVar porque no hace falta porque ya usas el .get en la funcion add_test() , pero en 2:26:06 aprox en la updatetestscreen tambien usas el .get() para cada variable y en los atributos de la clase tambien los definis poniendo lo de StringVar y eso. osea mi consulta seria porque no se programan de la misma forma ya que ambas serian entradas de datos. no se si pude ser mas especifico ahi muchas gracias!
WHAAAAAATTT? 4 Horas AJAJAJA Dejo mi comentario en lo que lo termino jajajajaja gracias por este especial de 1000 subs!
Tienes trabajo para rato con este vídeo! Pero bueno, creo que es un proyecto muy guay para aprender Python, interfaces gráficas, bases de datos, POO y de todo. Espero que os guste la verdad.
Que tema de vs code es?
Dimas sigue haciendo mas con tkinter mas avanzado plis
Qué te gustaría ver? De momento no tengo nada pensado con tkinter, pero si os hace ilusión y encontramos una idea interesante lo podemos plantear!
4 horas de just facts
Hablo catalán castellano inglés y factores
@@Dimasmas FACTORES JAJAJAJA
no puedo instalar tkinder me sale esto
C:\Users\Usuario>pip install Tkinter
ERROR: Could not find a version that satisfies the requirement Tkinter (from versions: none)
ERROR: No matching distribution found for Tkinter
WARNING: You are using pip version 21.2.4; however, version 22.0.3 is available.
You should consider upgrading via the 'C:\Users\Usuario\AppData\Local\Programs\Python\Python310\python.exe -m pip install --upgrade pip' command.
Qué sistema operativo utilizas? Si es Windows tkinter viene por defecto con la instalación de Python
hasta ahora vamos en el minuto 20 y vamos entendiendo las explicaciones... vamos a ver qué tal con el video, por lo pronto lo dejo para mañana porque va a pasando de media noche.
Me alegro que se entiendan!
Hola mi querido, dos cosas, la carpeta Stylo esta?? no la veo.... y sabes que me salta este error _tkinter.TclError: bad screen distance "#363636"
PS C:\Users\miria\OneDrive\Escritorio\pyytinker>
pues no se como resolverlo :-(
Hola Mirian, te indica en qué línea del código salta ese error?
@@Dimasmas hay mi querido... En las primeras horas del vídeo en styles.py la variable COMPONENT = "363636"
cuando la comento, todo funciona... Cuando la activo me salta ese error... Se que solo es el fondo de la label... Pero bue.. si comento esa línea me queda blanco
@@Dimasmas listo!!!! Cambie el nombre de la variable bd
.. se ve que interpretaba que era una base... 😁🤭
@@Green_earth_style Perfecto Mirian, me alegro que lo hayas podido resolver!
Dumas te odio xddd
Has hecho este video una semana después de que me haya aprendido todo esto por mi cuenta xq no habías hecho el vídeo... Soy un parguela.
Buen video igualmente, le servirá a los sigiientes :)
Buenooo siempre te lo puedes ver de fondo para repasar jaajajajaj
@@Dimasmas Acabo de ver que he escrito Dumas xdddd
Me alegra mucho ver que el canal sube tío, haces contenido súper util y de mucha calidad, mucho ánimo!
@@yorentior3421 Muchas gracias! Poco a poco vamos creciendo 🙌
Amigo estoy haciendo un proyecto, y la primer parte del video (en donde se crean las clases y se insertan datos) es muy parecida a lo que tengo que hacer, solo que cambia un poco las relaciones entre mis clases, podrias orientarme? tengo una clase llamada GrupoFamiliar, otra llamada GrupoFamiliar-Integrantes y otra llamada Roles, un grupo familiar puede tener muchos integrantes, cada integrante puede tener un grupo familiar, y un rol, la cosa esta en que cada integrante puede a su vez tener un rol, y cada rol muchos integrantes y no se como hacer esa relacion
Te intento echar un cable aunque con texto no va a ser fácil:
Tendrás los modelos GrupoFamiliar, Integrante y Rol. Estos tienen que establecer las siguientes relaciones:
- GrupoFamiliar tiene una relación "One to many" con Integrante (un grupo contiene múltiples integrantes). Por tanto tiene que definir una "relationship" dentro del modelo GrupoFamiliar con el modelo Integrante.
- El Integrante tiene una relación "One to One" con un GrupoFamiliar (un integrante pertenece a un único grupo). Por tanto dentro de Integrante tendrás una columna con una "ForeignKey" hacia el modelo de GrupoFamiliar.
- De Integrante a Rol tienes otra relación One to One (la misma que de Answer hacia Question)
- De Rol a Integrantes de nuevo "One to Many" (La misma que de Question hacia Answer)
Que extensiones ocupas?
En VSCode tengo la de python (es un pack con varias9 y sqlite
Excelente este proyecto.....puedes compartir el repositorio del codigo ?
Muchas gracias! Siii, lo he puesto ya en la descripción y el comentario pineado
como dejes de subir python y subas minecraft , hago un pacto con todo los dioses romanos , los griegos,los vikingos, los guanches, hablo con jisus con krisna , buda , ala, hasta con el dios espagueti si hace falta pa que se acabe este mundo sin sentido , nos vamos todos al "banjala" y ahí ya me das clases particulares.... que seguro que en el reino de los cielos no ta permitido gastar tiempo con minecraft jejejejeje . No ahora enserio , por favor no hagas eso NUNCA xD!
La verdad es que con vídeos de programación cuesta mucho crecer ... Así que en breves pasaré a grabar salseos, reacciones, recopilaciones de clips y mucho Minecraft. Python fue bonito mientras duró 🥲
@@Dimasmas Dios no que acabo de encontrarte, me persigue la mala suerte , es como todos los festivales a los que voy siempre me dicen : "Este festival ya no es lo que era antes", "El del año pasado fue mucho mejor..."
Joder ,siempre que llego a un sitio resulta que deja de ser tan "chachi" X'D.... he tenido que ser muy malo en mis vidas anteriores.....
@@Dimasmas Bueno fuera distracciones que aun voy por el minuto 45... de vuelta gracias por tu contenido es TOP , muy TOP... de verdad deberías pensar el rollo de acerte tu academia yo pagaría por estar en una plataforma tuya aprendiendo todos los días , me encanta como explicas las cosas clarito clarito, de manera dinámica, amena y explicando lo que realmente hace falta, porque ni en cursos de pago de udemy he encontrado contenido tan bueno!(Y llevo casi 3 de udemy) te lo digo muy en serio , estaba muy pero que muy frustrado y me has llenado de motivación de nuevo, voy a tope contigo! si haces minecraff eres tan top, que hasta me pondría a jugar seguro... jajjaja no , no lo creo.. xD, espero que si subes minecraf sea para explicar código de juegos.... xDxD