Search code examples
pythondatabaseooptkinterxampp

Value submitted through tkinter login page is not reflected in the database


I am designing an app in python 3 and I am using xampp as database.

I have a LogIn Page and Home Page. The idea is that when I login by entering the credentials there is navigation between the pages and the credentials are reflected in the database. Here the pages are treated as frames. I am able to navigate between the frames.

My code shows no error but the entry made in the log in page is not reflected in the database.

The code is as shown below

import tkinter as tk
from tkinter import ttk
import mysql.connector
from tkinter import messagebox


class App(tk.Tk):
    bg_img_path = "images\\bg9.png"

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.geometry("1500x750")

        main_frame = tk.Frame(self, width=200, height=50, highlightbackground="black", highlightthickness=1,
                              background="#e6ffe6")
        main_frame.pack(side='top', fill='both', expand='True')

        main_frame.grid_rowconfigure(0, weight=1)
        main_frame.grid_columnconfigure(0, weight=1)

        self.bkgr_image = tk.PhotoImage(file=self.bg_img_path)

        self.frames = {}
        for F in (LoginPage,HomePage):
            page_name = F.__name__
            frame = F(main_frame, self)
            self.frames[page_name] = frame
            frame.grid(row=0, column=0, sticky='nsew')

        self.show_frame("LoginPage")

    def show_frame(self, container):
        frame = self.frames[container]
        frame.tkraise()


class BasePage(tk.Frame):

    def __init__(self, parent, controller):
        super().__init__(parent)
        self.controller = controller
        label_bkgr = tk.Label(self, image=controller.bkgr_image)
        label_bkgr.place(x=0, y=0)


class LoginPage(BasePage):

    def __init__(self, parent, controller):
        super().__init__(parent, controller)

        login_frame = tk.Frame(self, width=200, height=50, highlightbackground="black", highlightthickness=1,
                               background="#e6ffe6")
        login_frame.grid(row=400, column=20, padx=500, pady=250)

        self.label_title = tk.Label(login_frame, text="Log In", font=("Helvetica", 40), bg="#e6ffe6")
        self.label_title.grid(row=0, column=20, padx=10, pady=10)

        self.label_username = tk.Label(login_frame, text="Username", font=("Helvetica", 20), bg="#e6ffe6")
        self.label_username.grid(row=50, column=20, padx=10, pady=10)

        self.entry_username = tk.Entry(login_frame, width=15, font=("Helvetica", 20))
        self.entry_username.grid(row=50, column=30, padx=10, pady=10)

        self.label_password = tk.Label(login_frame, text="Password", font=("Helvetica", 20), bg="#e6ffe6")
        self.label_password.grid(row=60, column=20, padx=10, pady=10)

        self.entry_password = tk.Entry(login_frame, width=15, font=("Helvetica", 20))
        self.entry_password.grid(row=60, column=30, padx=10, pady=10)

        self.login_button = tk.Button(login_frame, text="Log In", command=lambda: [self.submit,self.controller.show_frame("HomePage")], font=("Helvetica", 20),
                                      bg="#e6ffe6")
        self.login_button.grid(row=70, column=25, padx=10, pady=10)

    def submit(self):
        self.u_name = self.entry_username.get()
        self.p_word = self.entry_password.get()

        employee = mysql.connector.connect(host="localhost", user="root", password="", database="edatabase")
        cursor_variable = employee.cursor()

        cursor_variable.execute("INSERT INTO login VALUES ('" + self.u_name + "','" + self.p_word + "')")
        employee.commit()

        employee.close()

        messagebox.showinfo("Log In", "Succesfull")


class HomePage(BasePage):

    def __init__(self, parent, controller):
        super().__init__(parent, controller)

        #self.menubar = tk.Menu(self)
        #self.menubar.add_command(label = "Home")
        #self.menubar.add_command(label = "Careers")

        label1 = ttk.Label(self, text='Home', font=("Helvetica", 20))
        label1.pack(padx=10, pady=10)

app = App()
app.mainloop()

Any help is appreciated.


Solution

  • the error is resolved. I forgot to put (). Then it becomes

    self.login_button = tk.Button(login_frame, text="Log In", command=lambda: [self.submit(),self.controller.show_frame("HomePage")], font=("Helvetica", 20),
                                          bg="#e6ffe6")