Skip to content
Advertisement

How do i make a button in tkinter update the display page to something else

i’m working on a login system, so i made the display with two buttons Login and Sign up button so i want to make a new page appears when the user clicks one the buttons for example if he clicks on Login the page will update to a page with entry boxes of the credentials and the same thing with the sign up button i need some ideas how to do it i’m somehow beginner in Tkinter, Here is my code :

from tkinter import *

root = Tk()
root.title("Login System")
root.geometry('550x300')
root.configure(bg="Black")

home_label = Label(root,text="Welcome",font=("Helvatica",32),fg="White",bg="Black")
home_label.pack(pady=30)


login = Button(root,text="Login",font=("Nexa",22),bg="White",fg="Black",width=10)
login.pack(pady=0)

signup = Button(root,text="Sign UP",font=("Nexa",22),bg="White",fg="Black",width=10)
signup.pack(pady=5)

root.mainloop()

Advertisement

Answer

Here is a simple one with a TopLevel()

import tkinter as tk
from tkinter.simpledialog import askstring
from tkinter import *
import os
import re

#Designing window for registration

def register():
    global register_screen
    register_screen = Toplevel(main_screen)
    register_screen.title("Register")
    register_screen.geometry("300x250")
#Globalling variables
    global username
    global password
    global username_entry
    global password_entry
    global invLbl
    username = StringVar()
    password = StringVar()
 #Labels and entry fields for register screen
    invLbl = Label(register_screen, text="", fg="red", font=("calibri", 11))
    Label(register_screen, text="Please enter details below", bg="blue").pack()
    Label(register_screen, text="").pack()
    username_lable = Label(register_screen, text="Username * ")
    username_lable.pack()
    username_entry = Entry(register_screen, textvariable=username)
    username_entry.pack()
    password_lable = Label(register_screen, text="Password * ")
    password_lable.pack()
    password_entry = Entry(register_screen, textvariable=password, show='*')
    password_entry.pack()
    Label(register_screen, text="").pack()
    Button(register_screen, text="Register", width=10, height=1, bg="blue", command = register_user).pack()
    invLbl.pack()

#Designing window for login

def login():
    global login_screen
    login_screen = Toplevel(main_screen)
    login_screen.title("Login")
    login_screen.geometry("300x250")
    Label(login_screen, text="Please enter details below to login").pack()
    Label(login_screen, text="").pack()

    global username_verify
    global password_verify

    username_verify = StringVar()
    password_verify = StringVar()

    global username_login_entry
    global password_login_entry

    Label(login_screen, text="Username * ").pack()
    username_login_entry = Entry(login_screen, textvariable=username_verify)
    username_login_entry.pack()
    Label(login_screen, text="").pack()
    Label(login_screen, text="Password * ").pack()
    password_login_entry = Entry(login_screen, textvariable=password_verify, show= '*')
    password_login_entry.pack()
    Label(login_screen, text="").pack()
    Button(login_screen, text="Login", width=10, height=1, command = login_verify).pack()

#Implementing event on register button

def register_user():    
    username_info = username.get()
    password_info = password.get()
    valid = True
    for char in username_info:
        if char.isdigit() == True:
            valid = False
            #If there is a for example a number iin the username, this error message will be printed.
            invLbl.config(text="Invalid Username")
    if username_info == '':
        valid = False
        #If the username is left blank, this error message will be printed.
        invLbl.config(text="Enter a Username")
    
    #Password Validation
    if len(password_info) <3 or len(password_info) > 16:
        valid = False
        invLbl.config(text="Ensure password is not less than 3 or greater than 16 digits.")
    
    if valid == True:
        file = open(username_info, "w")
        file.write(username_info + "n")
        file.write(password_info)
        file.close()
        #Registration Success Message
        invLbl.config(text="Registration Success!", fg="green")
    
    
    username_entry.delete(0, END)
    password_entry.delete(0, END)

#Implementing event on login button

def login_verify():
    username1 = username_verify.get()
    password1 = password_verify.get()
    username_login_entry.delete(0, END)
    password_login_entry.delete(0, END)

    list_of_files = os.listdir()
    if username1 in list_of_files:
        file1 = open(username1, "r")
        verify = file1.read().splitlines()
        if password1 in verify:
            login_sucess()


        else:
            password_not_recognised()

    else:
        user_not_found()

#Designing popup for login success

def login_sucess():
    global login_success_screen
    login_success_screen = Toplevel(login_screen)
    login_success_screen.title("Success")
    login_success_screen.geometry("150x100")
    Label(login_success_screen, text="Login Success").pack()
    Button(login_success_screen, text="OK", command=delete_login_success).pack()

#Designing popup for login invalid password

def password_not_recognised():
    global password_not_recog_screen
    password_not_recog_screen = Toplevel(login_screen)
    password_not_recog_screen.title("Success")
    password_not_recog_screen.geometry("150x100")
    Label(password_not_recog_screen, text="Invalid Password ").pack()
    Button(password_not_recog_screen, text="OK", command=delete_password_not_recognised).pack()

#Designing popup for user not found

def user_not_found():
    global user_not_found_screen
    user_not_found_screen = Toplevel(login_screen)
    user_not_found_screen.title("Success")
    user_not_found_screen.geometry("150x100")
    Label(user_not_found_screen, text="User Not Found").pack()
    Button(user_not_found_screen, text="OK", command=delete_user_not_found_screen).pack()

#Deleting popups

def delete_login_success():
    login_success_screen.destroy()
    
    login_screen.destroy()

def delete_password_not_recognised():
    password_not_recog_screen.destroy()


def delete_user_not_found_screen():
    user_not_found_screen.destroy()


#Designing Main(first) window

def main_account_screen():
    global main_screen
    main_screen = Tk()
    main_screen.geometry("300x250")
    main_screen.title("Account Login")
    Label(text="Select Your Choice", bg="blue", width="300", height="2", font=("Calibri", 13)).pack()
    Label(text="").pack()
    Button(text="Login", height="2", width="30", command = login).pack()
    Label(text="").pack()
    Button(text="Register", height="2", width="30", command=register).pack()

    main_screen.mainloop()
main_account_screen()
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement