Ricardo Desu Perez
Ricardo Desu Perez

Reputation: 69

How to use other variables from other definitions using buttons?

I want to be able to receive the name that is set from pressing the button from startgame() and have it stored in getName(). But I don't know how to receive variables from another definition in doing so. I tried my best, but no luck? Any suggestions?

from tkinter import *
root = Tk()

root.wm_title("HangMan")

canvas = Canvas(root, height=400, width=800)
canvas.pack()

def titlescreen():
    title = canvas.create_text(400, 100, font=("Times New Roman", 50), tags="title")
    canvas.itemconfig(title, text="HANGMAN: THE GAME")

    startButton = Button(canvas, text="Start Game", width=10, command=startgame)
    canvas.create_window(400, 200, window = startButton)

    creditsButton = Button(canvas, text="Credits", width=10, command=displaycredits)
    canvas.create_window(400, 250, window = creditsButton)

def startgame():
    canvas.delete(ALL)
    welcome = canvas.create_text(400,100,font=("Times New Roman",50),text="WELCOME!")
    welcome2 = canvas.create_text(400,150,font=("Times New Roman", 30),text="PLEASE ENTER YOUR NAME")


    nameEntry = Entry(canvas)
    enterName = Button(canvas, text="Enter", width=10,command=getName)


    canvas.create_window(350, 200, window = nameEntry)
    canvas.create_window(490, 200, window = enterName)


    nameEntry.delete(0,END)
    nameEntry.insert(0, "Enter Player Name")

    name = nameEntry.get()

    return name


def getName():
    name2 = startgame()
    print (name)
    return name2

def displaycredits():
    canvas.delete(ALL)
    created = canvas.create_text(400,100,font=("Times New Roman",50),text="CREATED BY")
    credit1 = canvas.create_text(400,150,text="Patrick Tsui & Ricardo Perez")
    credit2 = canvas.create_text(400,170,text="Montclair State University Students")
    backButton = Button(canvas,text="Back to Title Screen",width=30,command=backtotitle)
    canvas.create_window(400, 200, window=backButton)

def backtotitle():
    canvas.delete(ALL)
    titlescreen()

def drawPole():
    canvas.delete(ALL)
    a = canvas.create_rectangle(550,50,550,350,fill = "black")
    b = canvas.create_rectangle(350,50,550,50,fill = "black")
    c = canvas.create_rectangle(350,50,350,90,fill = "black")

titlescreen()

root.mainloop()

Upvotes: 0

Views: 44

Answers (1)

TigerhawkT3
TigerhawkT3

Reputation: 49320

...
canvas.pack()
name = '' # initialize a 'name' variable

def startgame():
    def getName(): # define this inside startgame, so we don't need to pass widgets
        global name # tell the program that we're referring to the global variable 'name'
        name = nameEntry.get() # assign the contents of nameEntry to 'name'
        backtotitle() # do something

    canvas.delete(ALL)
    welcome = canvas.create_text(400,100,font=("Times New Roman", 50),
    text="WELCOME!")
    welcome2 = canvas.create_text(400,150,font=("Times New Roman", 30),
    text="PLEASE ENTER YOUR NAME")

    nameEntry = Entry(canvas)
    enterName = Button(canvas, text="Enter", width=10,
    command=getName) # does not pass widget

    canvas.create_window(350, 200, window = nameEntry)
    canvas.create_window(490, 200, window = enterName)

    nameEntry.delete(0,END)
    nameEntry.insert(0, "Enter Player Name")

    print(name) # for testing, to see the current name

Upvotes: 1

Related Questions