0

I've searched everywhere on the web but unfortunately no where did I find an answer to this question:

after setting a tkinter Entry() widget's textvariable to a textvariable.

the text variable does not update after I have typed text into the entry.

code below:

def saveFileName(self):
    if(self.save_file_name != ""):
        self.window.destroy()
        self.name_not_set = False
        print("saving...")
    else:
        print("notsaving...entry empty")
        pass
def cancel(self):
    self.name_not_set = False
    self.exit = True
    self.window.destroy()
    print("exiting...")
def askForFilename(self):
    self.window = tk.Tk()
    self.window.wm_title("enter a file name")
    label = Label(self.window,text="please enter a file name:").pack(side="top")
    entry = Entry(self.window,textvariable=self.save_file_name).pack()
    save = Button(self.window,text="save",command=self.saveFileName).pack()
    cancel = Button(self.window,text="cancel",command=self.cancel).pack()
    self.window.mainloop()

The necessary variables have been defined and these methods are part of a class which is a tk.TK() instance.

my attempt to enter a name :( console log this problem is very bothersome :( very sad :(

Thank you and merry christmas in advance!

C Lu
  • 87
  • 8
  • 2
    Please show how you defined the variable. – Bryan Oakley Nov 19 '18 at 01:10
  • Note that statements like `label = Label(self.window,text="please enter a file name:").pack(side="top")` will assign the result of calling `pack` to the variable named `label`, which can often cause problems (maybe yours). – martineau Nov 19 '18 at 01:48

1 Answers1

1

A textvariable associated with an Entry should be a StringVar(). I don't se any such declaration in your code.

self.save_file_name = StringVar()

To set and get the value of a StringVar() you must use the set() or get() method, eg.

def saveFileName(self):
    if(self.save_file_name.get() != ""):
        self.window.destroy()
        # etc, etc.

Also, don't create more than one instance of Tk() as in:

def askForFilename(self):
    self.window = tk.Tk()

Use Toplevel() instead. Or even better: use the tkinter filedialogs.

figbeam
  • 7,001
  • 2
  • 12
  • 18
  • Thank you! I did set the StringVar variable in the datafield. which I didn't include in my code above so sorry for the inclarity(if that's a word) but the issue appears to be the second thing you mentioned. I forgot to call .get() on the StringVar, :D – C Lu Nov 23 '18 at 02:43