2011-03-21 287 views
1
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() 

我在编程方面一般都是新手,但我试图通过Tkinter GUI库制作图像程序。我需要能够在上面的代码中执行的是返回存储在文件名中的字符串,因此它位于程序的全局范围内,我可以使用它。问题是我不知道如何在使用按钮调用函数时执行此操作。我无法在任何网站上找到这个问题的答案,所以我会很感激任何人对这个问题的帮助。用Tkinter中的按钮调用函数后返回一个值

回答

2

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

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. 

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

+0

感谢您的帮助。 – 2011-03-21 18:01:26

5

如果您使用Tk应用程序的class based approach,而不是从事件处理程序返回值,则可以将它们分配给实例变量。这是最好的方法,因为基于功能的GUI应用程序不能精确地扩展,因为需要在模块范围内放置东西。

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() 
相关问题