craf wrote: > Hi. > > The query code is as follows: > > ------------------------------------------------------ > import Tkinter > import tkMessageBox > > > class App: > def __init__(self, master): > master.protocol("WM_DELETE_WINDOW",quit) > > > def quit(): > if tkMessageBox.askyesno('','Exit'): > master.quit() > > > master =Tkinter.Tk() > app = App(master) > master.mainloop() > ------------------------------------------------------- > > As you can see, when I run and close the main window displays > a text box asking if you want to quit, if so, closes > application. > > Question: > > Is it possible to define the quit() function in another separate > module?. > I tried it, but it throws the error that the global name > 'master' is not defined.
You can have the modules import each other and then access the master as <module>.master where you'd have to replace <module> with the actual name of the module, but that's a bad design because (1) you create an import circle (2) functions relying on global variables already are a bad idea Your other option is to pass 'master' explicitly and then wrap it into a lambda function (or functools.partial): $ cat tkquitlib.py import tkMessageBox def quit(master): if tkMessageBox.askyesno('','Exit'): master.quit() $ cat tkquit_main.py import Tkinter import tkquitlib class App: def __init__(self, master): master.protocol("WM_DELETE_WINDOW", lambda: tkquitlib.quit(master)) master = Tkinter.Tk() app = App(master) master.mainloop() Peter -- http://mail.python.org/mailman/listinfo/python-list