[EMAIL PROTECTED] wrote: > I've created a short test program that uses tkFileDialog.askdirectory > to help the user input a path into a tk entry widget. The problem I'm > having is that when I run the code as listed below, the getPath > function is called when the program initially runs, not when the button > is pressed. > > from Tkinter import * > import tkFileDialog > > class App: > > def __init__(self, master): > > frame = Frame(master) > frame.pack() > > t = StringVar() > self.entry = Entry(frame, textvariable=t) > self.entry.pack(side=LEFT) > > self.button = Button(frame, text="Select", fg="red") > self.button["command"] = self.getPath(t) > self.button.pack(side=LEFT) > > def getPath(self, t): > dirPath = tkFileDialog.askdirectory(initialdir="c:\\") > print dirPath > t.set(dirPath) > > root = Tk() > app = App(root) > root.mainloop() > > > The problem arises when I try to pass the t variable in the "command" > option of the button widget. If I set the command to > "command=self.getpath" rather than "command=self.getpath(t)", then I > don't get this issue. But I would like to be able to pass a variable > to the the function through the command option. I'm a Tk newbie .... > what am I doing wrong? >
Well, in python 2.5, you might consider functools.partial. Other options, including lambda, will be suggested and are the traditional way to do this sort of thing. Here is the revised code: import functools from Tkinter import * import tkFileDialog class App: def __init__(self, master): frame = Frame(master) frame.pack() t = StringVar() self.entry = Entry(frame, textvariable=t) self.entry.pack(side=LEFT) self.button = Button(frame, text="Select", fg="red") # note change here self.button["command"] = functools.partial(self.getPath, t) self.button.pack(side=LEFT) def getPath(self, t): dirPath = tkFileDialog.askdirectory(initialdir="c:\\") print dirPath t.set(dirPath) root = Tk() app = App(root) root.mainloop() -- James Stroud UCLA-DOE Institute for Genomics and Proteomics Box 951570 Los Angeles, CA 90095 http://www.jamesstroud.com/ -- http://mail.python.org/mailman/listinfo/python-list