Python Forum
[Tkinter] Tkinter button help and general commands - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [Tkinter] Tkinter button help and general commands (/thread-20825.html)



Tkinter button help and general commands - Iceman - Sep-01-2019

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.


RE: Tkinter button help and general commands - Yoriz - Sep-01-2019

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.