Python Forum
Unable to return value from callback function of a button in Python Tkinter - 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: Unable to return value from callback function of a button in Python Tkinter (/thread-12007.html)



Unable to return value from callback function of a button in Python Tkinter - nilaybnrj - Aug-05-2018

Hi Team

I am trying to get the input written in an Entry box using Tkinter, But whenever I am trying to do so I am not getting the desired result..Instead a None is getting returned. Please help My code is given below
from Tkinter import *

class menu:
    def __init__(self,master):
        self.master=master
        self.var1 = StringVar()
        self.entry = Entry(self.master,textvariable=self.var1)
        self.entry.pack(side=TOP)
        self.var2 = StringVar()
        self.value=self.get_value()
        self.button = Button(self.master,text='Hit Me',command = self.get_value)
        self.button.pack(side=TOP)

    def get_value(self):
         self.value= self.var1.get()

if __name__=="__main__":
    root = Tk()
    Menu = menu(root)
    print Menu.value
    root.mainloop()
Output:
None
in this while printing Menu.value I am getting None instead off getting what I entered into Entry.Please help.Thanks in advance.


RE: Unable to return value from callback function of a button in Python Tkinter - Windspar - Aug-05-2018

1. Don't flood namespace.
from Tkinter import *
this is better.
import Tkinter as tk
Example. Every thing seems to be working find.
import Tkinter as tk

class Menu:
    def __init__(self,master):
        self.master=master
        self.var1 = tk.StringVar()
        self.entry = tk.Entry(self.master, textvariable=self.var1)
        self.entry.pack(side=tk.TOP)

        self.button = tk.Button(self.master,text='Hit Me',command = self.get_value)
        self.button.pack(side=tk.TOP)
        self.value = None

    def get_value(self):
        print(self.entry.get())
        print(self.var1.get())
        self.value = self.entry.get()
        print(self.value)

if __name__=="__main__":
    root = tk.Tk()
    menu = Menu(root)
    root.mainloop()



RE: Unable to return value from callback function of a button in Python Tkinter - nilaybnrj - Aug-05-2018

(Aug-05-2018, 12:58 PM)Windspar Wrote: 1. Don't flood namespace.
from Tkinter import *
this is better.
import Tkinter as tk
Example. Every thing seems to be working find.
import Tkinter as tk

class Menu:
    def __init__(self,master):
        self.master=master
        self.var1 = tk.StringVar()
        self.entry = tk.Entry(self.master, textvariable=self.var1)
        self.entry.pack(side=tk.TOP)

        self.button = tk.Button(self.master,text='Hit Me',command = self.get_value)
        self.button.pack(side=tk.TOP)
        self.value = None

    def get_value(self):
        print(self.entry.get())
        print(self.var1.get())
        self.value = self.entry.get()
        print(self.value)

if __name__=="__main__":
    root = tk.Tk()
    menu = Menu(root)
    root.mainloop()

Hi Windspar,
Thanks for your input.But what I want is to return the input value to a variable in the main program so that I can use t for other purpose. Actually my idea is to make one FTP GUI app so that user will provide input in GUI app & after the pressing Hit Me button the main program will be able to fetch the input details of user from this GUI. In this program if I am trying to return a value the output is coming as None. So, please tell me how I can use this input in entry box to another program? Again thank you very much for your input.


RE: Unable to return value from callback function of a button in Python Tkinter - Windspar - Aug-05-2018

You never going to be able to print anything in the main area.
Program must run first. Then when program ends. All widgets are destroyed. All this happens when mainloop is called.

Example
import Tkinter as tk

class Main:
    root = tk.Tk()
    value = "None"

class Menu:
    def __init__(self, master):
        self.master = master
        self.entry = tk.Entry(self.master)
        self.entry.pack(side=tk.TOP)
        self.button = tk.Button(master,text='Hit Me',command = self.get_value)
        self.button.pack(side=tk.TOP)
        self.button_send = tk.Button(master, text="Get Text", command=self.get_text)
        self.button_send.pack()
        self.label = tk.Label(master, text=Main.value)
        self.label.pack()

    def get_value(self):
        Main.value = self.entry.get()

    def get_text(self):
        #self.label['text'] = self.entry.get()
        self.label['text'] = Main.value


if __name__=="__main__":
    Main.menu = Menu(Main.root)
    Main.root.mainloop()



RE: Unable to return value from callback function of a button in Python Tkinter - woooee - Aug-05-2018

It has to go after the mainloop(), otherwise you print it before tkinter runs, i.e
    root.mainloop()
    print Menu.value 
Note that classes use UpperCase and variables use lower_case_with_underscores. You should also state that you are using Python2.X, which is the exception, as Python3 is what most people are using (Python2 reaches end of life in 2020).