Python 使用Tkinter中的按钮调用函数后返回值

Python 使用Tkinter中的按钮调用函数后返回值,python,tkinter,Python,Tkinter,一般来说,我是编程新手,但我正试图通过Tkinter GUI库制作一个图像程序。在上面的代码中,我需要能够做的是返回存储在filename中的字符串,这样它就在程序的全局范围内,并且我能够使用它。问题是我不知道在用按钮调用函数时如何做到这一点。我在任何网站上都找不到这个问题的答案,所以我非常感谢任何人对这个问题的帮助 通常,使用全局变量在程序中传递信息是不好的做法。但是,如果确实必须这样做,请使用可变数据类型(如列表或dict)作为全局变量,并从回调函数main更改其内容 from Tkinte

一般来说,我是编程新手,但我正试图通过Tkinter GUI库制作一个图像程序。在上面的代码中,我需要能够做的是返回存储在filename中的字符串,这样它就在程序的全局范围内,并且我能够使用它。问题是我不知道在用按钮调用函数时如何做到这一点。我在任何网站上都找不到这个问题的答案,所以我非常感谢任何人对这个问题的帮助

通常,使用全局变量在程序中传递信息是不好的做法。但是,如果确实必须这样做,请使用可变数据类型(如列表或dict)作为全局变量,并从回调函数
main
更改其内容

from Tkinter import *
from tkFileDialog import askopenfilename
from PIL import Image
def main():
    filename = askopenfilename(filetypes=[("Jpeg","*.jpg")])
return filename
root = Tk()
button = Button(root,text="Open",command=main)
button.pack()
root.title("Image Manipulation Program")
root.mainloop()

如果您想经常这样做,请考虑实现自己的类来传递信息。

< P>如果使用To-TK应用程序,而不是从事件处理程序返回值,则可以将它们分配给实例变量。这是最好的方法,因为基于函数的GUI应用程序不能精确地扩展,因为需要将内容放在模块范围内

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

class Application(Frame):

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

    def createWidgets(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()