Python Forum

Full Version: Tkinter button help and general commands
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hey guys, sorry this is gonna be a long thread and I'm very basic at python and tkinter, so just stay with me Big Grin .

So im trying to make a login window, and i have coded this, which makes the window but the button doesn't work and i don't really understand .self command:

import tkinter
window = tkinter.Tk()
window.geometry('250x190')
window.title("Encrypter")

U = tkinter.Label(window, text = "Username", height = 4)
U.grid(row = 1, column = 0, padx =1, pady = 1)
UE = tkinter.Entry(window, width = 20)
UE.grid(row = 1, column = 1, padx = 1, pady = 1)

P = tkinter.Label(window, text = "Password")
P.grid(row = 2, column = 0, padx = 1, pady = 1)
PE = tkinter.Entry(window)
PE.grid(row = 2, column = 1 , padx = 1, pady = 1)

EB = tkinter.Button(window, text = "Validate ID", fg = "white", bg = "red")
EB.grid(row = 3, column = 1 , padx = 1, pady = 1)

CB = tkinter.Checkbutton(window, text = "keep logged in")
CB.grid(columnspan = 2)


def tkinter_button_clicked(self):
        # print("Clicked")
        username = UE.get()
        password = PE.get()

        # print(username, password)

        if username == "iceman" and password == "Password":
            tm.showinfo("Login info", "Welcome Iceman")
        else:
            tm.showerror("Login error", "Incorrect username")

window.mainloop()
I've looked at another person's example and it works but im trying to learn myself, but here's theirs:

from tkinter import *
import tkinter.messagebox as tm


class LoginFrame(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.label_username = Label(self, text="Username")
        self.label_password = Label(self, text="Password")

        self.entry_username = Entry(self)
        self.entry_password = Entry(self, show="*")

        self.label_username.grid(row=0, sticky=E)
        self.label_password.grid(row=1, sticky=E)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        self.checkbox = Checkbutton(self, text="Keep me logged in")
        self.checkbox.grid(columnspan=2)

        self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
        self.logbtn.grid(columnspan=2)

        self.pack()

    def _login_btn_clicked(self):
        # print("Clicked")
        username = self.entry_username.get()
        password = self.entry_password.get()

        # print(username, password)

        if username == "Iceman" and password == "Password":
            tm.showinfo("Login info", "Welcome Iceman")
        else:
            tm.showerror("Login error", "Incorrect username")


root = Tk()
lf = LoginFrame(root)
root.mainloop()
If you made it this far welldone and thanks for any help.
The button has not had an event bound to it by setting the callback function on the command parameter.
self is not required when using the function outside of a class as its no longer a method.
The called function will need to be moved so it is defined before trying to add it to the command parameter.
tkinter.messagebox will need importing before you can use it.