Skip to content Skip to sidebar Skip to footer

Returning A Value After Calling A Function With A Button In Tkinter

from Tkinter import * from tkFileDialog import askopenfilename from PIL import Image def main(): filename = askopenfilename(filetypes=[('Jpeg','*.jpg')]) return filename root =

Solution 1:

If you use the class based approach to Tk applications, instead of returning values from event handlers, you can assign them to instance variables. This the best approach, as function-based GUI applications don't scale well precisely because the need to place stuff at module scope.

from Tkinter import *

classApplication(Frame):

    defmain(self):
        self.filename = askopenfilename(filetypes=[("Jpeg","*.jpg")])

    defcreateWidgets(self):
        self.button = Button(root,text="Open",command=self.main)
        self.button.pack()

    def__init__(self, master=None):
        Frame.__init__(self, master)
        self.filename = None
        self.pack()
        self.createWidgets()

root = Tk()
root.title("Image Manipulation Program")
app = Application(master=root)
app.mainloop()

Solution 2:

Generally, it is bad practice to use global variables to pass information around your program. However, if you really must do this, use a mutable data type (such as a list or a dict) as your global variable and change its contents from your callback function, main.

returned_values = {}    # Create an empty dict.defmain():
    returned_values['filename'] = askopenfilename(filetypes=[("Jpeg","*.jpg")])
    # returned_values['filename'] may now be accessed in the global scope.

If you intend to do this frequently, consider implementing your own class to pass information around.

Post a Comment for "Returning A Value After Calling A Function With A Button In Tkinter"