battery514
battery514

Reputation: 249

Tkinter Button Doesn't Perform Action

Full disclosure, I am a Python newb, and even newer to Tkinter. I have the below code which I was able to parse together from various sources which shows the buttons and dialogue box as I want them to be shown. The "Cancel" button works appropriately, but when I enter proper credentials and click "OK", nothing happens. Based on what I have read, I think I may have a binding and/or callback issue, but I am not sure. After several hours of reading and watching YouTube videos, I am banging my head against the desk. Any help would be greatly appreciated.

from Tkinter import *
    master = Tk()

    def login_info():
        bankUsername = bank_user.get()
        bankPassword = bank_pass.get()
        return

    Label(master, text=str(properBankName) + " Username: ").grid(row=0, sticky = "E")
    Label(master, text="Password: ").grid(row=1, sticky = "E")

    master.title("Please Enter Credentials")

    bank_user = Entry(master)
    bank_pass = Entry(master)

    bank_user.grid(row=0, column=1)
    bank_pass.grid(row=1, column=1)

    Button(master, height=1, width=8, text='OK', command=login_info).grid(row=3, column=0, sticky = "E", pady=4)
    Button(master, height=1, width=8, text='Cancel', command=master.quit).grid(row=3, column=1, sticky = "W", pady=4)

    master.mainloop()

Upvotes: 0

Views: 379

Answers (1)

furas
furas

Reputation: 143187

I use global variables to keep values and then I use master.destroy() to close window.
(on Linux master.quit() doesn't execute master.destroy() which close window)

I use variable login to recognize which button was clicked.

I use columnspan=2 for Entry and move Buttons one cell to the right - and now it looks better.

BTW: lines Button(...).grid(...) were very long so I splited them into two lines to make more readable.

Code:

from Tkinter import *

# --- functions ---

def login_info():
    # inform function to use external/global variables
    global bankUsername
    global bankPassword
    global login

    login = True

    bankUsername = bank_user.get()
    bankPassword = bank_pass.get()

    # quit window 
    master.destroy()

# --- main ---

# create global variables
bankUsername = None
bankPassword = None
login = False

# - GUI

master = Tk()

Label(master, text="Username:").grid(row=0, sticky="E")
Label(master, text="Password:").grid(row=1, sticky="E")

master.title("Please Enter Credentials")

bank_user = Entry(master)
bank_pass = Entry(master)

bank_user.grid(row=0, column=1, columnspan=2)
bank_pass.grid(row=1, column=1, columnspan=2)

b = Button(master, height=1, width=8, text='OK', command=login_info)
b.grid(row=3, column=1, sticky="E", pady=4)

b = Button(master, height=1, width=8, text='Cancel', command=master.destroy)
b.grid(row=3, column=2, sticky="W", pady=4)

master.mainloop()

# --- executed after closing window ---

if login: # if login is True:
    print(bankUsername)
    print(bankPassword)
else:
    print("Canceled")

Upvotes: 1

Related Questions