Search code examples
pythontkintertkinter-entry

Python Tkinter StringVar only displaying Py_Var(number)


I am using Tkinter in python 3.4 to make a text based game, and I cannot figure out how to get a string from an Entry widget, it just returns Py_Var#, # being a number. I have looked at answers to similar questions, but none of them quite line up with what I need and have. Here's the relevant pieces of code:

from tkinter import * 

win = Tk() 
win.geometry("787x600")

playername = StringVar()

def SubmitName():
    playername.get
    #messagebox.showinfo("Success", playername)
    print(playername)

frame3 = Frame(win) 
frame3.pack()
label1 = Label(frame3, text="You awaken in a room, with no memories of yourself or your past. ")

label2 = Label(frame3, text="First, how about you give yourself a name:")

label1.config(font=("Courier", 11)) 
label2.config(font=("Courier", 11))

entry1 = Entry(frame3, textvariable=playername) 
entry1.config(font=("Courier", 11))

label1.grid(row=0, column=0, columnspan=3) 
label2.grid(row=1, column=0)

entry1.grid(row=1, column=1)

bnamesub= Button(frame3, text="Submit", command=lambda: SubmitName()) 
bnamesub.grid()

win.mainloop()

Also, first time using stackoverflow and its reading weird but w/e.


Solution

  • from tkinter import *
    import pickle
    
    win = Tk()
    win.geometry("787x600")
    
    def SubmitName():
            playername = entry1.get()
            messagebox.showinfo("Success", playername)
            print(playername)
    
    frame3 = Frame(win)
    frame3.grid()
    label1 = Label(frame3, text="You awaken in a room, with no memories of yourself or your past. ")
    
    label2 = Label(frame3, text="First, how about you give yourself a name:")
    
    label1.config(font=("Courier", 11))
    label2.config(font=("Courier", 11))
    
    #name entered is a StringVar, returns as Py_Var7, but I need it to return the   name typed into entry1.
    entry1 = Entry(frame3)
    entry1.config(font=("Courier", 11))
    
    label1.grid(row=0, column=0, columnspan=3)
    label2.grid(row=1, column=0)
    
    entry1.grid(row=1, column=1)
    
    bnamesub= Button(frame3, text="Submit", command=lambda: SubmitName())
    bnamesub.grid()
    

    What I changed:
    -deleted playername = StringVar(). We don't really need it;
    -changed inside the function: changed playername.get to playername = entry1.get();
    -added frame3.grid() (without geometry managment, widgets cannot be shown on the screen.);
    -also, a little edit: in Python, comments are created with # sign. So I changed * to #.