Tutorial de Python Tkinter para múltiples ventanas

1. Descripción

         En este tutorial de Python Tkinter, aprenderemos cómo crear múltiples ventanas en Python  Tkinter y también veremos diferentes ejemplos relacionados con múltiples ventanas . Y cubriremos esos temas.
  • Python Tkinter múltiples ventanas
  • Registro de usuario de Python Tkinter con múltiples ventanas
  • Verificación de acceso a varias páginas de Python Tkinter

Tabla de contenido

2. Problema de ventanas múltiples

        Primero, aprenderemos cómo crear múltiples ventanas usando Python Tkinter .

        Estamos aprendiendo cómo funcionan las ventanas múltiples. Por ventanas múltiples nos referimos a conectar una página con otras páginas que están vinculadas entre sí y se abren en nuevas pestañas o incluso nos redirigen a nuevas páginas.

        código :

import tkinter as tk

def New_Window():
    Window = tk.Toplevel()
    canvas = tk.Canvas(Window, height=HEIGHT, width=WIDTH)
    canvas.pack()
    
HEIGHT = 300
WIDTH = 500

ws = tk.Tk()
ws.title("Python Guides")
canvas = tk.Canvas(ws, height=HEIGHT, width=WIDTH)
canvas.pack()

button = tk.Button(ws, text="Click ME", bg='White', fg='Black',
                              command=lambda: New_Window())

button.pack()
ws.mainloop()

        A continuación se muestran algunos aspectos destacados clave del código proporcionado.

  • WS  para la ventana raíz
  • altura  = la altura del widget de lienzo.
  • ancho  = Ancho del widget de lienzo.
  • BG se utiliza para el color de fondo.
  • FG  se utiliza para el color de primer plano.
  • Tut tut . Button()  se utiliza para agregar un botón.

        producción:

        En el código anterior, creamos un botón simple en la parte inferior de la pantalla. Al hacer clic en el botón, se abrirá una nueva ventana.

Ventana múltiple de Python Tkinter

        producción:

        Como podemos ver en el resultado anterior, al hacer clic en el botón " Hacer clic en mí " se abrirá una nueva ventana. El resultado se muestra a continuación.

Ejemplo de ventanas múltiples de Python Tkinter

salida final

 

3. Registro de usuario de Python Tkinter usando múltiples ventanas

        En la siguiente sección, veremos un usuario de Python Tkinter registrado con múltiples ventanas.

        Tenemos que hacer un registro donde hemos hecho columnas de bloque que contienen información relacionada con nombre, correo electrónico, contraseña. También utiliza correos electrónicos de verificación OTP para verificar si los usuarios reales tienen una base de datos saludable.

        código:

        Algunas de las bibliotecas que utilizamos en este código son smtplib , sqlite3 y messagebox , random , EmailMessage , Tkinter y la biblioteca email.message. También se utilizan aquí algunas etiquetas, campos, entradas y botones.

  • sqllite3.connect()  para conexión a base de datos
  • Label()  se utiliza para mostrar texto en esta vista de usuario, no interactiva.
  • Entry()  es un cuadro de texto de una sola línea que acepta un valor del usuario.
from tkinter import *
import re
from tkinter import messagebox
import sqlite3
import random
from email.message import EmailMessage
import smtplib


<strong># Database</strong> 
try:
    con = sqlite3.connect('website.db')

    con.execute('''create table if not exists users(
                fname text not null,
                lname text not null,
                email text not null,
                password text not null);      
    ''')
    con.close()

except Exception as ep:
    messagebox.showerror('', ep)
 
 
ws = Tk()
ws.title('Python Guides')
ws.geometry('500x400')
ws.config(bg="#447c84")
ws.attributes('-fullscreen',True)

<strong># functions</strong>

def otp_gen():
    pass

cpy = ''

def sendOtp():
    otp_no = ''
    for _ in range(4):
        r = random.randint(0, 9)
        otp_no += str(r)  
    
    global cpy 
    cpy += otp_no
    sender = "[email protected]"
    reciever = em.get()
    password = "Cute...pie@0823"
    msg_body = f'otp is {cpy}'
    msg = EmailMessage()
    msg['subject'] = 'OTP'   
    msg['from'] = sender
    msg['to'] = reciever
    msg.set_content(msg_body)
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
        smtp.login(sender,password)
        
        smtp.send_message(msg)
    
    print(cpy)
    return cpy

def clr():
    fname.delete(0, END)
    lname.delete(0, END)
    em.delete(0, END)
    pwd.delete(0, END)


def submit():
    enteredOtp = otp.get()
    expectedOtp = cpy
    print(expectedOtp)

    fname_check = fname.get()
    lname_check = lname.get()
    em_check = em.get()
    pwd_check = pwd.get()
    otp_check = otp.get()
    check_count = 0

    if fname_check == "":
        warn = "First name can't be empty!"
    else:
        check_count += 1
    if lname_check == "":
        warn = "Last name can't be empty!"
    else:
        check_count += 1
    if em_check == "":
        warn = "Email can't be empty!"
    else:
        check_count += 1
    if pwd_check == "":
        warn = "Password can't be empty!"
    else:
        check_count += 1
    if otp_check == "":
        warn = "Otp can't be empty!"
    else:
        check_count += 1

    # if fname_check, lname_check, pwd_check, otp_check:
    if check_count == 5:
        if (expectedOtp == enteredOtp):
            con = sqlite3.connect('website.db')
            c = con.cursor()
            c.execute("insert into users VALUES (:fname, :lname, :em, :pwd)",{

                'fname': fname.get(),
                'lname': lname.get(),
                'em': em.get(),
                'pwd': pwd.get()
            })
            con.commit()
            
            ws.destroy()
            import app

        else:
            messagebox.showerror('','Incorrect Otp')
    else:
        messagebox.showerror('', warn)

<strong># frames</strong>
frame = Frame(ws, padx=20, pady=20)
frame.pack(expand=True)

<strong># labels</strong>
Label(
    frame, 
    text="Create New Account",
    font=("Times", "24", "bold")
    ).grid(row=0, columnspan=3, pady=10)

Label(
    frame, 
    text='First Name', 
    font=("Times", "14")
    ).grid(row=1, column=0, pady=5)

Label(
    frame, 
    text='Last Name', 
    font=("Times", "14")
    ).grid(row=2, column=0, pady=5)

Label(
    frame, 
    text='Email Address', 
    font=("Times", "14")
    ).grid(row=3, column=0, pady=5)

Label(
    frame, 
    text='Password', 
    font=("Times", "14")
    ).grid(row=4, column=0, pady=5)

Label(
    frame, 
    text='Enter OTP', 
    font=("Times", "14")
    ).grid(row=5, column=0, pady=5)


<strong># Entry</strong>
fname = Entry(frame, width=30)
lname = Entry(frame, width=30)
em = Entry(frame, width=30)
pwd = Entry(frame, width=30)
otp = Entry(frame, width=30)


fname.grid(row=1, column=1)
lname.grid(row=2, column=1)
em.grid(row=3, column=1)
pwd.grid(row=4, column=1)
otp.grid(row=5, column=1)

<strong># button </strong>
clr = Button(frame, text="Clear", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=clr)
reg = Button(frame, text="Register", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=submit)
ext = Button(frame, text="Exit", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=lambda:ws.destroy())
otpp = Button(frame, text="verify email", padx=10, relief=RAISED, font=("Times", "10", "bold"), command=sendOtp)
clr.grid(row=6, column=0, pady=20)
reg.grid(row=6, column=1, pady=20)
ext.grid(row=6, column=2, pady=20)
otpp.grid(row=5, column=2)

ws.mainloop()

        producción:

        En el código anterior hemos creado un formulario de registro con detalles como etiquetas, botones y entradas , este código está conectado con una conexión de base de datos que agrega usuarios reales para registrarse aquí.

Registro tkinter de Python Ventana múltiple

        salida de cuenta nueva

        En el resultado a continuación, completamos todos los detalles y verificamos el correo electrónico para tomar medidas adicionales.

Registro de usuario de Python Tkinter con múltiples ventanas

        Registro de usuario de Python Tkinter con múltiples ventanas

        Cuando verificamos e ingresamos aleatoriamente la OTP, podemos ver que se muestra un error con el mensaje " OTP incorrecta ". Esto significa que no podemos continuar hasta que proporcionemos la OTP y la dirección de correo electrónico correctas utilizadas para el registro.

Múltiples ventanas en Python tkinter

        Múltiples ventanas en Python tkinter

         

4. Verificación de acceso a varias páginas de Python Tkinter

        En la siguiente sección, veremos la validación del acceso a varias páginas.

        Por verificación de acceso nos referimos a verificar la contraseña y el correo electrónico del usuario registrado durante el registro. También podemos registrar un usuario usando el botón crear cuenta en este código.

        código:

        Iniciar sesión en la página.py

        Ahora, veamos que algunas de las bibliotecas que estamos usando en este código son  sqlite3 y messagebox  en la biblioteca Tkinter  . Aquí también se utilizan etiquetas, campos, entradas y botones.

  • ONU  para nombre de usuario
  • PD para contraseña
  • messagebox.showerror()  se usa cuando se ingresa algún nombre de usuario y contraseña incorrectos, automáticamente mostrará el error.
from tkinter import *
from tkinter import messagebox
import sqlite3



try:
        con = sqlite3.connect('website.db')
        c = con.cursor()
        c.execute("Select * from users")
        for i in c.fetchall():
            un = i[2]
            pd = i[3]
        
except Exception as ep:
    messagebox.showerror('', ep)

ws = Tk()
ws.title('Python Guides')
ws.geometry('500x400')
ws.config(bg="#447c84")
ws.attributes('-fullscreen',True)


def createAccount():
    ws.destroy()
    import register


def submit():
    u = uname.get()
    p = pwd.get()
    check_counter=0
    if u == "":
       warn = "Username can't be empty"
    else:
        check_counter += 1
    if p == "":
        warn = "Password can't be empty"
    else:
        check_counter += 1
    if check_counter == 2:
        if (u == un and p == pd):
            ws.destroy()
            import app
        
        else:
            messagebox.showerror('', 'invalid username or password')
    else:
        messagebox.showerror('', warn)
       
<strong># frame</strong>
frame = Frame(ws, padx=20, pady=20)
frame.pack_propagate(False)
frame.pack(expand=True)


<strong># labels</strong>
Label(
    frame, 
    text="Admin Login", 
    font=("Times", "24", "bold") 
    ).grid(row=0,  columnspan=3, pady=10) #..place(x=170, y=10)

Label(
    frame, 
    text='Enter Username', 
    font=("Times", "14")
    ).grid(row=1, column=1, pady=5) #.place(x=50, y=70)

Label(
    frame, 
    text='Enter Password', 
    font=("Times", "14")
    ).grid(row=2, column=1, pady=5) #.place(x=50, y=110)

<strong># Entry</strong>
uname = Entry(frame, width=20)
pwd = Entry(frame, width=20, show="*")
# uname.place(x=220, y=70)
# pwd.place(x=220, y=110)
uname.grid(row=1, column=2)
pwd.grid(row=2, column=2)

<strong># button</strong> 
reg = Button(
    frame, 
    text="Create Account", 
    padx=20, pady=10, 
    relief=RAISED, 
    font=("Times", "14", "bold"), 
    command=createAccount
    )

sub = Button(
    frame, 
    text="Login", 
    padx=20, 
    pady=10, 
    relief=RAISED, 
    font=("Times", "14", "bold"), 
    command=submit
    )

reg.grid(row=3, column=1, pady=10)
sub.grid(row=3, column=2, pady=10)

ws.mainloop()

Producción:

Después de ejecutar el código anterior, obtuvimos este resultado en el que podemos ver etiquetas de  "ingresar nombre de usuario""ingresar contraseña"  y dos botones trabajando en diferentes funciones.

Ventana múltiple de inicio de sesión de Python tkinter

        salida de registro

        En el resultado a continuación, ingresamos el correo electrónico en el nombre de usuario y la contraseña en la sección de contraseña y hicimos clic en el botón Iniciar sesión.

Python Tkinterlogin1

        ventana de inicio de sesión

        Como podemos ver el usuario y contraseña son ingresados ​​incorrectamente por parte del usuario, lo que demuestra que no nos redirige a otra ventana o página.

Ejemplo 1 de inicio de sesión de Python tkinter

        iniciar sesión 2. salida

        aplicación.py

        A continuación se muestra un código que ejecuta otra página una vez que se completa el proceso de verificación.

código:

from tkinter import *
from tkinter import messagebox

ws = Tk()
ws.title('Python Guides')
ws.geometry('500x300')
ws.config(bg="#447c84")
ws.attributes('-fullscreen',True)

# functions
def msg():
    return messagebox.showinfo('', 'Life is short, \n do what you love')

def logOut():
   resp = messagebox.askquestion('', 'Are you sure?')
   if resp == 'yes':
        ws.destroy()
        
   else:
        pass

# frames
frame = Frame(
     ws,
     padx=20,
     pady=20
)
frame.pack(expand=True)

<strong># image </strong>
img = PhotoImage(file='img.png')

<strong># labelslo</strong>
Label(
     frame, 
     text="Congratulations!",
     font=("Times", "24", "bold")
     ).grid(row=0, columnspan=3)

Label(
     frame, 
     text='Your Account is Active', 
     fg='green',
     font=("Times", "14")
     ).grid(row=1, columnspan=3)

imglbl = Label(frame, image=img)
imglbl.grid(row=2, column=1)

<strong># button</strong> 
exp = Button(frame, text="open>>", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=msg)
logout = Button(frame, text="Logout", padx=20, pady=10, relief=SOLID, font=("Times", "14", "bold"), command=logOut)
exp.grid(row=2 , column=1)
logout.grid(row=3, column=1)

ws.mainloop()

Luego de ejecutar el siguiente código y hacer clic en el botón "Iniciar sesión ", debemos ingresar un nombre de usuario y contraseña válidos. Nos redireccionará a otra ventana y nos mostrará el siguiente mensaje.

Además, podemos ver un botón de cierre de sesión que nos ayudará a salir de la página.

Ventana múltiple de la aplicación Python tkinter

        producción

        Quizás también quieras leer los siguientes tutoriales de Tkinter.

Supongo que te gusta

Origin blog.csdn.net/gongdiwudu/article/details/132679520
Recomendado
Clasificación