Soluciones de ejercicios de Python y Tkinter

curso de Python

Soluciones de ejercicios – Curso de 100 días de Python #14

Esta página contiene las soluciones para los ejercicios del día 14 del curso. Ejercicios dedicados a Tkinter de Python.

  1. La ruta almacenada es la misma en la cual tienes el archivo .py. Esto se obtiene de forma dinámica gracias a la variable especial __file___ de Python.
  2. Aquí podías poner una ruta estática en el iconbitmap o una ruta dinámica como la que tengo en este código:
#Importaciones
from tkinter import *
import os

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("www.programacionfacil.org")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Bucle de ejecución
root.mainloop()

Te dejo aquí mi estructura de carpetas por si te es más fácil de interpretar la solución:

  1. La primera solución (sin utilizar lista para los nombres), es esta:
#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")
carpeta_motocicletas = os.path.join(carpeta_imagenes, "motocicletas")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("www.programacionfacil.org")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Carga de imágenes
#Motocicleta 1
motocicleta_1 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, "moto-1.jpg")).resize((400,250)))
muestra_moto_1 = Label(image=motocicleta_1)
muestra_moto_1.grid(row=0, column=0)

#Motocicleta 2
motocicleta_2 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, "moto-2.jpg")).resize((400,250)))
muestra_moto_2 = Label(image=motocicleta_2)
muestra_moto_2.grid(row=1, column=0)

#Motocicleta 3
motocicleta_3 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, "moto-3.jpg")).resize((400,250)))
muestra_moto_3 = Label(image=motocicleta_3)
muestra_moto_3.grid(row=0, column=1)

#Motocicleta 4
motocicleta_4 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, "moto-4.jpg")).resize((400,250)))
muestra_moto_4 = Label(image=motocicleta_4)
muestra_moto_4.grid(row=1, column=1)

#Bucle de ejecución
root.mainloop()

Espero que hayas ajustado los resize() para que queden en una proporción adecuada.

soluciones de ejercicios de python

Finalmente, la solución opcional utilizando una lista para las rutas. Solo cambian las líneas 14 (la lista), 25, 30, 35 y 40. En lugar del nombre de las imágenes, he formateado las posiciones de la lista. De esa forma, tengo estas imágenes relacionadas, agrupadas en una lista.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")
carpeta_motocicletas = os.path.join(carpeta_imagenes, "motocicletas")
lista_motocicletas = ["moto-1.jpg", "moto-2.jpg","moto-3.jpg","moto-4.jpg"]

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("www.programacionfacil.org")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Carga de imágenes
#Motocicleta 1
motocicleta_1 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, f"{lista_motocicletas[0]}")).resize((400,250)))
muestra_moto_1 = Label(image=motocicleta_1)
muestra_moto_1.grid(row=0, column=0)

#Motocicleta 2
motocicleta_2 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, f"{lista_motocicletas[1]}")).resize((400,250)))
muestra_moto_2 = Label(image=motocicleta_2)
muestra_moto_2.grid(row=1, column=0)

#Motocicleta 3
motocicleta_3 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, f"{lista_motocicletas[2]}")).resize((400,250)))
muestra_moto_3 = Label(image=motocicleta_3)
muestra_moto_3.grid(row=0, column=1)

#Motocicleta 4
motocicleta_4 = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_motocicletas, f"{lista_motocicletas[3]}")).resize((400,250)))
muestra_moto_4 = Label(image=motocicleta_4)
muestra_moto_4.grid(row=1, column=1)

#Bucle de ejecución
root.mainloop()
  1. Llegamos al proyecto. Aquí tenías que crear un login simulado para la tienda de motocicletas.

5- Icono personalizado

#Importaciones
from tkinter import *
import os

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Bucle de ejecución
root.mainloop()

6- Título de ventana con el nombre de la tienda.

Se añade la línea 17.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Bucle de ejecución
root.mainloop()

7- Una imagen con el logo de la tienda.

Se añaden las líneas de la 21 a la 25.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Bucle de ejecución
root.mainloop()

8- Dos etiquetas que pongan, «Usuario» y «Contraseña».

Se añaden las líneas de la 27 a la 32.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()

#Contraseña
Label(text="Contraseña").pack()

#Bucle de ejecución
root.mainloop()

9- Dos entradas de texto correspondientes a estas etiquetas.

Se añaden las líneas 30, 31, 35 y 36

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.pack()

#Bucle de ejecución
root.mainloop()

10- Las entradas de texto deben tener en su interior estos mensajes por defecto: «Ej:Laura» en el de usuario y la contraseña llevará «*******» 7 asteriscos.

Se añaden las líneas 31 y 37.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.pack()

#Bucle de ejecución
root.mainloop()

11- Un botón para enviar.

Se añaden las líneas 40 y 41.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.pack()

#Botón de envío
Button(text="Entrar").pack()

#Bucle de ejecución
root.mainloop()

Requisitos opcionales del proyecto

12- Pon los asteriscos de la contraseña con el método de multiplicación de strings.

Se modifica la línea 37.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*"*7)
contrasena.pack()

#Botón de envío
Button(text="Entrar").pack()

#Bucle de ejecución
root.mainloop()

13- Los mensajes, por defecto de las entradas de texto, serán eliminados una vez se pulse el click izquierdo para empezar a escribir.

Se añaden las líneas 32 y 39.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.bind("<Button-1>", lambda e: usuario.delete(0, END))
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.bind("<Button-1>", lambda e: contrasena.delete(0, END))
contrasena.pack()

#Botón de envío
Button(text="Entrar").pack()

#Bucle de ejecución
root.mainloop()

14- Crea una tupla vacía llamada «usuario_creado». Esta tupla servirá para almacenar el usuario y la contraseña.

Se añaden las líneas 14 y 15.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de usuario nuevo
usuario_creado = ()

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.bind("<Button-1>", lambda e: usuario.delete(0, END))
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.bind("<Button-1>", lambda e: contrasena.delete(0, END))
contrasena.pack()

#Botón de envío
Button(text="Entrar").pack()

#Bucle de ejecución
root.mainloop()

15- Crea una entrada por la consola que pida el usuario y la contraseña. Ambas cosas se deben pedir dos veces, con el fin de comprobar que no se haya equivocado.

Se añaden las líneas de la 17 a la 22.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de usuario nuevo
usuario_creado = ()

#Se pide usuario y contraseña en la consola
nuevo_usuario = input("Introduzca un nombre para el nuevo usuario.\n")
nueva_contrasena = input("Introduzca una contraseña para el nuevo usuario.\n")
#Se solicta de nuevo el usuario y la contraseña
repite_usuario = input("Introduzca el nombre de usuario de nuevo.\n")
repite_contrasena = input("Introduzca la contraseña de nuevo.\n")

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.bind("<Button-1>", lambda e: usuario.delete(0, END))
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.bind("<Button-1>", lambda e: contrasena.delete(0, END))
contrasena.pack()

#Botón de envío
Button(text="Entrar").pack()

#Bucle de ejecución
root.mainloop()

16 – Si los datos coinciden, se almacenarán en dos posiciones de la tupla «usuario_creado».

Se añaden las líneas de la 25 a la 30.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de usuario nuevo
usuario_creado = ()

while True:
    #Se pide usuario y contraseña en la consola
    nuevo_usuario = input("Introduzca un nombre para el nuevo usuario.\n")
    nueva_contrasena = input("Introduzca una contraseña para el nuevo usuario.\n")
    #Se solicta de nuevo el usuario y la contraseña
    repite_usuario = input("Introduzca el nombre de usuario de nuevo.\n")
    repite_contrasena = input("Introduzca la contraseña de nuevo.\n")

    #Se evalúa si el usuario o contraseña coinciden
    if nuevo_usuario != repite_usuario or nueva_contrasena != repite_contrasena:
        print("Los valores no coinciden, vuelva a intentarlo.")
    else:
        usuario_creado = (nuevo_usuario,nueva_contrasena)
        break

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.bind("<Button-1>", lambda e: usuario.delete(0, END))
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.bind("<Button-1>", lambda e: contrasena.delete(0, END))
contrasena.pack()

#Botón de envío
Button(text="Entrar").pack()

#Bucle de ejecución
root.mainloop()

17- Crea un sistema sencillo que sea capaz de detectar si el usuario y la contraseña coinciden. Este sistema irá con los Entry, si pone mal el usuario o la contraseña, al pulsar el botón, le deberá informar del fallo con una etiqueta y lo puede volver a intentar. En cambio, si es correcto, le avisamos de ello.

Se añaden las líneas de la 60 a la 67. Se modifica también el botón para añadirle un command (línea 70).

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de usuario nuevo
usuario_creado = ()

while True:
    #Se pide usuario y contraseña en la consola
    nuevo_usuario = input("Introduzca un nombre para el nuevo usuario.\n")
    nueva_contrasena = input("Introduzca una contraseña para el nuevo usuario.\n")
    #Se solicta de nuevo el usuario y la contraseña
    repite_usuario = input("Introduzca el nombre de usuario de nuevo.\n")
    repite_contrasena = input("Introduzca la contraseña de nuevo.\n")

    #Se evalúa si el usuario o contraseña coinciden
    if nuevo_usuario != repite_usuario or nueva_contrasena != repite_contrasena:
        print("Los valores no coinciden, vuelva a intentarlo.")
    else:
        usuario_creado = (nuevo_usuario,nueva_contrasena)
        break

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.bind("<Button-1>", lambda e: usuario.delete(0, END))
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.bind("<Button-1>", lambda e: contrasena.delete(0, END))
contrasena.pack()

# Función para validar el login
def validar():
    obtener_usuario = usuario.get()
    obtener_contrasena = contrasena.get()
    if obtener_usuario != usuario_creado[0] or obtener_contrasena != usuario_creado[1]:
        Label(text="Usuario o contraseña incorrectos.").pack()
    else:
        Label(text=f"Hola, {usuario_creado[0]}. Espere unos instantes...").pack()

#Botón de envío
Button(text="Entrar", command=validar).pack()

#Bucle de ejecución
root.mainloop()

18 – Parte de investigación

Para solucionar esta última parte, tenías que investigar un poco sobre el módulo getpass.

La importación está en la línea 5.

Lo único que cambia en el código, son los dos input() de la contraseña. En su lugar, utilizamos este input() especial de getpass que puedes ver en las líneas 21 y 24.

#Importaciones
from tkinter import *
import os
from PIL import ImageTk, Image
import getpass

#---Carga de directorios---
#Carpeta principal
carpeta_principal = os.path.dirname(__file__)

#Imágenes
carpeta_imagenes = os.path.join(carpeta_principal, "imagenes")
carpeta_logos = os.path.join(carpeta_imagenes, "logos")

#Creación de usuario nuevo
usuario_creado = ()

while True:
    #Se pide usuario y contraseña en la consola
    nuevo_usuario = input("Introduzca un nombre para el nuevo usuario.\n")
    nueva_contrasena = getpass.getpass("Introduzca una contraseña para el nuevo usuario.\n")
    #Se solicta de nuevo el usuario y la contraseña
    repite_usuario = input("Introduzca el nombre de usuario de nuevo.\n")
    repite_contrasena = getpass.getpass("Introduzca la contraseña de nuevo.\n")

    #Se evalúa si el usuario o contraseña coinciden
    if nuevo_usuario != repite_usuario or nueva_contrasena != repite_contrasena:
        print("Los valores no coinciden, vuelva a intentarlo.")
    else:
        usuario_creado = (nuevo_usuario,nueva_contrasena)
        break

#Creación de la ventana principal
root = Tk()
#Título de la ventana
root.title("American rider")
#Icono de la ventana
root.iconbitmap(os.path.join(carpeta_logos, "logo.ico"))

#Contenido de la ventana principal
#Logo
logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_logos, "logo.png")).resize((300,225)))
etiqueta = Label(image=logo)
etiqueta.pack()

#Campos de texto
#Usuario
Label(text="Usuario").pack()
usuario = Entry()
usuario.insert(0, "Ej:Laura")
usuario.bind("<Button-1>", lambda e: usuario.delete(0, END))
usuario.pack()

#Contraseña
Label(text="Contraseña").pack()
contrasena = Entry()
contrasena.insert(0, "*******")
contrasena.bind("<Button-1>", lambda e: contrasena.delete(0, END))
contrasena.pack()

# Función para validar el login
def validar():
    obtener_usuario = usuario.get()
    obtener_contrasena = contrasena.get()
    if obtener_usuario != usuario_creado[0] or obtener_contrasena != usuario_creado[1]:
        Label(text="Usuario o contraseña incorrectos.").pack()
    else:
        Label(text=f"Hola, {usuario_creado[0]}. Espere unos instantes...").pack()

#Botón de envío
Button(text="Entrar", command=validar).pack()

#Bucle de ejecución
root.mainloop()
Soluciones de ejercicios de Python y Tkinter

2 comentarios en «Soluciones de ejercicios de Python y Tkinter»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba